我想要一个RegExp,它将从字符串中删除所有特殊字符。我正在尝试这样的东西,但它在IE7中不工作,尽管它在Firefox中工作。
var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";
for (var i = 0; i < specialChars.length; i++) {
stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}
RegExp的详细描述也会很有帮助。
第一种解决方案不适用于任何UTF-8字母。(它将剪切诸如Їжак这样的文本)。我已经设法创建了一个不使用RegExp的函数,并在JavaScript引擎中使用了良好的UTF-8支持。原理很简单,如果一个符号的大写和小写相等,它就是一个特殊字符。唯一的例外是空格。
function removeSpecials(str) {
var lower = str.toLowerCase();
var upper = str.toUpperCase();
var res = "";
for(var i=0; i<lower.length; ++i) {
if(lower[i] != upper[i] || lower[i].trim() === '')
res += str[i];
}
return res;
}
更新:请注意,此解决方案仅适用于有小写字母和大写字母的语言。在像中文这样的语言中,这行不通。
更新2:当我在进行模糊搜索时,我得到了最初的解决方案。如果您还试图删除特殊字符来实现搜索功能,还有更好的方法。使用任何音译库,它将只从拉丁字符生成字符串,然后简单的Regexp将执行删除特殊字符的所有魔法。(这对中国人也适用,你也会通过制作特罗姆瑟得到额外的好处)。
纯Javascript regex不处理Unicode字母。
不要使用[^\w\s],这将删除带有口音的字母(如àèéìòù),更不用说西里尔字母或中文,来自这些语言的字母将被完整删除。
你真的不想把这些字母和所有的特殊字符一起去掉。你有两个机会:
在正则表达式中添加所有不想删除的特殊字符,例如:[^èéòàùì\w\s]。
看看xregexp.com。XRegExp通过\p{…}语法。
var str =“Їжак:::résd, $ % & adùf”
var search = XRegExp< first >的pL] +) ');
var res = XRegExp。代表(str,搜索,“全部”);
游戏机。log (res);/ /注册“Їжак:::resd, adf”
游戏机。log (str。代表(*);// / returns“rsd adf”
游戏机。log (str。代表(*);// returns“resd aduf”
“https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js”< script src = > / < script >