在javascript中,我想要清除所有非字母数字字符。这是我的代码:
function (inpt) {
return inpt.replace(/[^\w]/gi, "").replace(/_/g, "");
}
此代码100%正确。删除所有非字母数字字符。
\w
仍然允许使用下划线,这就是我将两个replace
语句链接在一起的原因。
然后我尝试将这样的正则表达式组合起来,现在不再过滤下划线了。
function (inpt) {
return inpt.replace(/[^\w_]/gi, ""); // note: added _
}
我做错了什么?
答案 0 :(得分:2)
您的[^\w_]
模式代表negated character class,与任何字符匹配,但与单词(字母,数字或_
)和_
字符匹配。
[^\w]
模式等于\W
。所以,你可以使用
/[\W_]/g
请参阅regex demo。
此处,[\W_]
是一个正面 character class,可以匹配非单词字符或_
。
JS演示:
var str = "some%_1string*";
console.log(str.replace(/[\W_]+/g, ''));
请注意.replace(/[\W_]+/g, '')
删除所需的字符比.replace(/[\W_]/g, '')
快一点,因为+
量词匹配1个连续出现的匹配字符并一次性删除它们。