正则表达式 - 组合模式

时间:2017-12-18 17:30:14

标签: javascript regex

在javascript中,我想要清除所有非字母数字字符。这是我的代码:

function (inpt) {
        return inpt.replace(/[^\w]/gi, "").replace(/_/g, "");
    }

此代码100%正确。删除所有非字母数字字符。

\w仍然允许使用下划线,这就是我将两个replace语句链接在一起的原因。

然后我尝试将这样的正则表达式组合起来,现在不再过滤下划线了。

function (inpt) {
        return inpt.replace(/[^\w_]/gi, "");     // note:  added _
    }

我做错了什么?

1 个答案:

答案 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个连续出现的匹配字符并一次性删除它们。