Javascript regexp中的拉丁字符

时间:2013-07-30 14:27:53

标签: javascript regex unicode boundary character-properties

我如何在这个javascript regexp中使用像ČčĆ抚Đđ这样的拉丁字符?

var regex = new RegExp('\\b' + this.value, "i");

更新:

我有这个代码用于过滤复选框标签,但是当有Ččć

的输入时它不能正常工作
function listFilter(list, input) {
    var $lbs = list.find('.css-label');

    function filter(){
        var regex = new RegExp('\\b' + this.value);
        var $els = $lbs.filter(function(){
            return regex.test($(this).text());
        });
        $lbs.not($els).hide().prev().hide();
        $els.show().prev().show();
    };

    input.keyup(filter).change(filter)
}

jQuery(function($){
    listFilter($('#list'), $('.search-filter'))
})

这是一个小提琴:DEMO

2 个答案:

答案 0 :(得分:4)

正则表达式中的问题是没有使用这些字符正确检测到单词边界(就像\w\W在Unicode方面处理不当)。

我建议先从

开始
new RegExp('(^|[\\s\\.])ČčĆ抚Đđ', "i")

并添加到[\\s\\.]您可能需要的其他字符作为字边界。

如果您无法定义预期的可能字边界,那么您最好使用库来生成" Unicode兼容"常用表达。其中一些列在this related question

答案 1 :(得分:2)

尝试:

/^[A-z\u00C0-\u00ff\s'\.,-\/#!$%\^&\*;:{}=\-_`~()]+$/

作为正则表达式。

请参阅以下示例:

var regexp = /[A-z\u00C0-\u00ff]+/g,
  ascii = ' hello !@#$%^&*())_+=',
  latin = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏàáâãäåæçèéêëìíîïÐÑÒÓÔÕÖØÙÚÛÜÝÞßðñòóôõöøùúûüýþÿ',
  chinese = ' 你 好 ';

console.log(regexp.test(ascii)); // true
console.log(regexp.test(latin)); // true
console.log(regexp.test(chinese)); // false

Glist:https://gist.github.com/germanattanasio/84cd25395688b7935182