目前使用 /[\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
]
最佳答案
尝试使用
([\W]-|-[\W]|[^\w-])+
正则表达式中的否定很繁琐,通常您必须使用前瞻来解决问题,但这里有一个简单的解决方法。我没有匹配所有非单词字符 ([\W]
),而是匹配任何不是单词字符或连字符的字符 ([^\w-]
),然后在连字符不被字符包围的特殊情况下添加([\W]-
和-[\W]
) .我必须先捕获连字符,否则非单词、非连字符捕获将匹配两个空格或特殊字符,而下一部分将无法提取连字符。
关于Javascript:用于捕获空格和特殊字符的正则表达式,单词中的连字符除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32459754/