【问题标题】:javascript match hebrew word inside double curly bracketsjavascript匹配双大括号内的希伯来语单词
【发布时间】:2017-07-09 14:04:29
【问题描述】:

我有一个用英语工作的 js 函数,但我在希伯来语中遇到错误

该函数匹配{{ }}内的字符串中的所有单词,并返回array中双大括号内的单词,不带大括号 字符串可以包含英语和非英语单词,如下所示:{{test}} {{בדיקה}} hi this is my test {{test2}}

var str_eng =  "{{test}} {{test1}}";
var str_non_eng = "{{בדיקה}} {{עעע}}";

str_eng.match(/{{\s*[\w\.]+\s*}}/g).map(function(x) { return x.match(/[\w\.]+/)[0];  }) //array[ "test","test1" ] //ok

str_non_eng.match(/{{\s*[\w\.]+\s*}}/g).map(function(x) { return x.match(/[\w\.]+/)[0];  }) // error not working

谢谢!

【问题讨论】:

标签: javascript regex


【解决方案1】:

\w 与希伯来语字符不匹配 - 为此,您需要在希伯来语的 Unicode 范围内与 [\u0590-\u05FF] 匹配 - 请参阅 here

您可以混合 \w[\u0590-\u05FF] 以匹配 ASCII 和希伯来语:

// var str_non_eng = "{{בדיקה}} {{עעע}}";
var str_non_eng = "{{test}} {{בדיקה}} hi this is my test {{test2}}";

var r1 = /{{\s*[\w\u0590-\u05FF\.]+\s*}}/g
var r2 = /[\w\u0590-\u05FF\.]+/;

var foo = str_non_eng.match(r1).map(function(x) {
  return x.match(r2)[0];
});
console.log(foo);

【讨论】:

  • 如果我的字符串不包含 {{ }} 我得到错误,“测试测试”
  • 如果你的字符串没有{{ }},那么你可以把代码分成两部分——var foo = str_non_eng.match(r1);然后if (foo) { // do the rest }
  • if ( str.indexOf("}") !== -1; ) { return str } 为我修复了它
【解决方案2】:

您不能将 \w 用于希伯来字符。 使用以下内容:

/{{\s*[\w\u0590-\u05FF\.]+\s*}}/g

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多