正则表达式替换短划线以外的非单词

时间:2015-03-17 09:55:11

标签: regex

我有一个正则表达式模式(\W|_)[^-]不适用于h_e.l_l.o - w_o.r_d(替换字符串是“”)。

它返回如下内容:

h      w   

我希望至少能看到这样的事情:

h e l l o - w o r d

如何替换除_符号以外的所有非字字符和-

1 个答案:

答案 0 :(得分:6)

你需要一个否定的字符类,它匹配除字母,数字和连字符以外的任何字符:

/[^-a-zA-Z0-9]+/

或(使用不区分大小写的修饰符):

/[^-a-z0-9]+/i

请参阅demo

请注意,-位于字符类start处,不需要转义。

您可以在最后添加一个加号,以便一次性匹配所有不需要的字符,以便一次性删除它们。

如果你想让你的模式识别Unicode(也就是说,在一些正则表达式中,如果你使用带/不带标记的速记字符类,它们也会匹配所有的Unicode对应物),你可以使用

/[^\w-]|_/

请参阅regex demo(或/(?:[^\w-]|_)+/以获取这些字符的整个部分。)

在这里,[^\w-]匹配任何不是单词char(字母,数字或下划线)的char,第二个替代_匹配下划线。