提问者:小点点

JavaScript Regexp重音不敏感和大写不敏感?


这里是我的代码:

this.datas = this.datas.filter(item => new RegExp(val, 'i').test(item.name));

例如,如果我搜索“création”,我需要得到所有的“create”,“création”,“create”。 有人知道怎么做吗? 谢谢!


共2个答案

匿名用户

有人知道怎么做吗?

是的,非常容易。 第一步是不要使用正则表达式。 只需使用String#LocaleCompare,它可以使用第三个带有选项的参数。 如果您提供sensitivity:“base”作为属性,它将处理字母的所有音调符号和差异大小写。

null

const data = [
  "creation",
  "Creation",
  "creátion",
  "créåtiön",
  "CRÉÅTIÖN",
  "foo",
  "bar"
]


function search(val) {
  return data.filter(
    //if localeCompare returns `0` then there is no difference in the words. They match
    x => x.localeCompare(val, undefined, { sensitivity: "base"}) === 0
  )
}


console.log(search("créaTION"));
console.log(search("creation"));

匿名用户

可以用JavaScripts正则表达式的字符范围表达式来完成:

null

var val = 'cr[ée]ation';

var data = ['no match', 'créaTION', 'creation', 'création', 'Creation'];
var regExp = new RegExp('cr[ée]ation', 'i');
data = data.filter(item => regExp.test(item));
console.log(data);