JavaScript 正则表达式将字符串拆分为单词

标签 javascript regex

我有以下正则表达式

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+ 个单词字符

Regex demo

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 \Bwithout \B

关于JavaScript 正则表达式将字符串拆分为单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58188811/

相关文章:

javascript - .join 方法是否将数组更改为 Javascript 中的字符串?

javascript - 即使在研究了 JS 和 JQ 之后也无法弄清楚 parseInt

C# Web 浏览器控件未正确更新

javascript - 使用 .replace() 的正则表达式

regex - 使用 egrep 在 bash 中查找被空格包围的行中的字符

c# - 两个已知标签之间可能出现不止一次的子字符串的正则表达式

javascript - 过滤表中的行失败

javascript - 现在移动应用程序使用原生 ES6 安全吗?

python - 正则表达式:如何匹配由某些字符包围的内容?

在不带引号的逗号上拆分字符串的Javascript方法