这里是我的代码:
this.datas = this.datas.filter(item => new RegExp(val, 'i').test(item.name));
例如,如果我搜索“création”,我需要得到所有的“create”,“création”,“create”。 有人知道怎么做吗? 谢谢!
有人知道怎么做吗?
是的,非常容易。 第一步是不要使用正则表达式。 只需使用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);