JavaScript:正则表达式捕获空格和特殊字符,但不包括单词内的连字符

4

目前我使用/[\W]+/g可以获得所有非单词字符,这正是我想要的。

然而,当连字符不被空格包围时(也就是作为连接词使用时),我希望省略它们。

例如:

 var test = [
    'e-mail', // Nothing  shouldn't be captured
    'e-commerce is great.', // Spaces and full stop should be captured
    'He - yes he - went', // Dashes and white space should be captured
    'He&-you, me-him' // &-, and the whitespace should be captured while the dash in me-him should not
    ]
1个回答

2

尝试使用[^\w-]+

在正则表达式中,否定匹配通常很棘手,通常需要使用预查来解决问题,但这里有一个简单的方法。与其匹配所有非单词字符([\W]),我匹配任何不是单词字符或连字符的字符([^\w-]),然后添加特殊情况,即当连字符没有被字符包围时([\W]--[\W])。我必须先捕获连字符,否则非单词、非连字符的捕获将匹配两个空格或特殊字符,下一部分将无法捕获连字符。


非常准确,看看我刚刚用\s替换了[[:space:]]的这个refiddle,看起来符合要求。 - dougBTV
抱歉,我刚刚更新了\s而不是[:space:]。 - Tro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接