Jquery正则表达式搜索土耳其字符

时间:2017-11-06 11:41:56

标签: jquery regex filter

我有一个过滤搜索我的数据。当我输入土耳其字符时,它不起作用。如何修改此代码?

    var $rows = $('#tableExport tr');
$('#search').keyup(function() {
    var val = '^(?=.*\\b' + $.trim($(this).val()).split(/\s+/).join('\\b)(?=.*\\b') + ').*$',
        reg = RegExp(val, 'i'),
        text;

    $rows.show().filter(function() {
        text = $(this).text().replace(/\s+/g, ' ');
        return !reg.test(text);
    }).hide();
});

这些是人物ç,ı,ğ,ö,ş,ü,Ç,İ,Ğ,Ö,Ş,Ü

2 个答案:

答案 0 :(得分:1)

这里有两个问题:1)\b不支持Unicode,2)i在不区分大小写的模式中使用时只匹配无点I,而不是虚线对应物。

我建议两个场景:1)空白边界,或2)ASCII字符+土耳其字母边界。

模式非常相似。以下是基于空白边界的代码示例:

var val = '^(?=.*(?:^|\\s)(?:' + $.trim($(this).val()).split(/\s+/).join('|') + ')(?!\\S))',
    reg = RegExp(val.replace(/[İi]/ig, '[iİ]'), 'i'),

此处,模式看起来像/^(?=.*(?:^|\s)(?:[iİ]ç|Anadolu)(?!\S))/i。请注意,.replace(/[İi]/ig, '[iİ]')允许将点缀İi匹配。

另一种方法意味着我们需要用一个用土耳其字母否定ASCII字符char(\b)的外观替换\w

var val = '^(?=.*(?:^|[^\\wçığöşüÇİĞÖŞÜ])(?:' +
    $.trim($(this).val()).split(/\s+/).map(function(x) { 
        return x.replace(/[İi]/ig, '[iİ]'); 
    }).join('|') + ')(?![\\wçığöşüÇİĞÖŞÜ]))',
    reg = RegExp(val, 'i'),

此处,模式看起来像/^(?=.*(?:^|[^\wçığöşüÇİĞÖŞÜ])(?:[iİ]ç|Anadolu)(?![\wçığöşüÇİĞÖŞÜ]))/i,并且可以安全地匹配非字母或非土耳其字母之间的字词。

答案 1 :(得分:0)

如果您使用的是React或angular,请尝试使用此方法。

const reg = new RegExp(q.toUpperCase()。replaceAll(/ [İi] / ig,'[iİ]'),'i')

q可能是来自客户端的对象或字符串。