【问题标题】:Replace flag “i” with regular expression pattern [duplicate]用正则表达式模式替换标志“i”[重复]
【发布时间】:2019-03-29 23:17:03
【问题描述】:

我有一个用于实时搜索 JSON 对象的输入

<input type="input" id="searchtxt" placeholder="Search">

这是我的 JS 代码

$('#searchtxt').keyup(function(){
 var Field = $(this).val(); 
 var regex = new RegExp(Field,"i");
   $.each(data, function(key, val){
     if (val.name.search(regex) != -1) {
        //Do something
     }
   });
 });

i 作为标志,我只能使我的正则表达式区分大小写,但我怎样才能使其与重音字符匹配,因为我的 JSON 包含诸如Ά、έ、Ί(希腊字母)等字符。

例如:

var data = [
{"id":"1",
"name":"Παράδειγμα",
},
{"id":"2",
"name":"Ίδιο Κείμενο",
}];

所以,如果我搜索“Παραδέιγ”val.name.search(regex) 将返回 -1 原因为ά/έ,但我想要匹配。

【问题讨论】:

    标签: javascript jquery json regex


    【解决方案1】:

    一般来说,JS Regexp 引擎对 Unicode 不太友好,因此重音符号会被解析为不同的字符,似乎没有标志可以忽略这些。最好的解决方案是使用外部库,例如 XRegexp,这是我看到的最常被推荐的库。

    另一种选择是remove diacritics using a function like this one,然后像往常一样使用正则表达式。

    【讨论】:

    • 我已经尝试使用类似的函数来删除变音符号,但是如果我搜索“Πάράδειγμά”而不是“Πάραδειγμά”,因为在JSON。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多