我有以下正则表达式
console.log("Test #words 100-200-300".toLowerCase().match(/(?:\B#)?\w+/g))
从上面你可以看到它正在 split “100-200-300”。我希望它忽略“-”并保持完整,如下所示:
--> ["test", "#words", "100-200-300"]
我需要正则表达式保持相同的规则,加上不拆分与“-”连接的单词
最佳答案
对于您当前的示例,您可以匹配一个可选的 #
、1 个以上的单词字符,并重复 0 次以上与 #
和 1 个以上的单词字符匹配的部分.
#?\w+(?:-\w+)*
#?
可选#
\w+
1+个单词字符(?:-\w+)*
作为一组重复 0+ 次匹配-
和 1+ 个单词字符
console.log("Test #words 100-200-300".toLowerCase().match(/#?\w+(?:-\w+)*/g));
关于 \B
anchor (以下文字取自链接)
\B is the negated version of \b. \B matches at every position where \b does not. Effectively, \B matches at any position between two word characters as well as at any position between two non-word characters.
如果您确实想使用该 anchor ,请参阅匹配项中的一些差异示例 with \B和 without \B
关于JavaScript 正则表达式将字符串拆分为单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58188811/