如何从字符串中删除突出的字符?特别是在IE6中,我有这样的事情:
accentsTidy = function(s){
var r=s.toLowerCase();
r = r.replace(new RegExp(/\s/g),"");
r = r.replace(new RegExp(/[àáâãäå]/g),"a");
r = r.replace(new RegExp(/æ/g),"ae");
r = r.replace(new RegExp(/ç/g),"c");
r = r.replace(new RegExp(/[èéêë]/g),"e");
r = r.replace(new RegExp(/[ìíîï]/g),"i");
r = r.replace(new RegExp(/ñ/g),"n");
r = r.replace(new RegExp(/[òóôõö]/g),"o");
r = r.replace(new RegExp(/œ/g),"oe");
r = r.replace(new RegExp(/[ùúûü]/g),"u");
r = r.replace(new RegExp(/[ýÿ]/g),"y");
r = r.replace(new RegExp(/\W/g),"");
return r;
};
Run Code Online (Sandbox Code Playgroud)
但IE6让我烦恼,似乎它不喜欢我的正则表达式.
我需要将2个字符串比较为相等,如下所示:
吕贝克==吕贝克
在JavaScript中.
为什么?好吧,我有一个自动完成字段,使用Lucene进行Java服务,其中地名自然存储(如Lübeck),但也被索引为规范化文本,
import sun.text.Normalizer;
oDoc.setNameLC = Normalizer.normalize(oLocName, Normalizer.DECOMP, 0)
.toLowerCase().replaceAll("[^\\p{ASCII}]","");
Run Code Online (Sandbox Code Playgroud)
这样一来,一个不知道输入"Mèxico"的人可以输入"墨西哥"并得到一个返回"Mèxico"的比赛(在很多其他可能的点击中,如"CaféMèxico,Dubai,UAE").
现在问题是我没有能力更改服务以在服务器端进行任何突出显示,因此我在客户端JavaScript方面突出显示如下内容:
return result.replace( input.replace(/[aeiou]/g,"."), "<b>$1</b>");
Run Code Online (Sandbox Code Playgroud)
这有点花哨,因为我在输入中转义了特殊的正则表达式字符.这对于点击开头的简单单词匹配很好,但是如果你突然希望支持像"london cafe"这样的多字匹配,它真的会崩溃:
input = input.strip().toLowerCase(); //fyi prototype's strip is like trim
re = new RegEx(input.replace(/[aeiou]/g,".").replace(/\s+/g,"|"),"gi");
return result.replace(re, "<b>$1</b>");
Run Code Online (Sandbox Code Playgroud)
这不适用于说"伦敦ca"(正在输入伦敦咖啡馆),因为它会将"Jack London Cabin,Dawson City,Canada"标记为:"Ja<b>ck</b> <b>London</b> <b>ca</b>bin, Dawson <b>Ci</b>ty, <b>Ca<b/>nada"
[注意"ck"和"Ci"特别]
因此,我有点像寻找一些不那么疯狂的东西:
input = input.strip().toLowerCase();
input = input.replace(/a/g,"[ÀàÁáÂâÃãÄäÅ寿??????]");
input = input.replace(/e/g,"[ÈèÉéÊêËë??????????]");
// ditto for i, o, u, y, c, n, maybe also d, g, h, j, k, l, r, s, t, w, z
re …
Run Code Online (Sandbox Code Playgroud) javascript unicode normalization accent-insensitive text-normalization
当某些字母发生变化时,如何在复数中找到单数?
以下情况:
Schließfach
是一个密码箱。Schließfächer.
如您所见,字母a
已更改为ä
。出于这个原因,第一个单词不再是第二个单词的子字符串,它们在“正则表达式技术”上是不同的。
也许我在下面选择的标签不在正确的角落。也许正则表达式对我来说不是正确的工具。我已经看到naturaljs
( natural.NounIflector()
) 为英语单词提供了开箱即用的功能。也许德语也有同样的解决方案?
什么是最好的方法,我如何在德语的复数中找到单数?