我有以下Regex:
正则表达式在我们应用程序的一些代码中,我可以看到它拆分单词。它显然删除了$#*等字符。我需要它做同样的事情,但允许使用哈希标签,因为单词现在可以有#哈希标签。
"Test #words".toLowerCase().split(/b/).filter(function(w){return w.match(/^w+$/) }) // returns ["test", "words"]
当前的Regex删除了散列,我希望它保持不变。所以我得到:
["test", "#words"]
您的"Test #words".toLowerCase().split(/b/).filter(function(w){return w.match(/^w+$/) })
执行以下操作:
- 整个字符串变为小写
- 字符串在任何单词边界处被拆分(前导和尾随,意味着
Test #words
被拆分为[,Test, #,words,]
) - 与
^w+$
正则表达式匹配的部分(从字符串开始到结束的1+个单词字符)保留在数组中
您可以使用相同的匹配方法将#
也包括在/(?:B#)?w+/g
:中
console.log("Test #words".toLowerCase().match(/(?:B#)?w+/g))
模式匹配:
(?:B#)?
-前面有非单词边界的可选#
w+
-1个或多个字字符(来自[a-zA-Z0-9_]
范围)
如果上下文不那么重要,请使用一个更简单的/#?w+/g
正则表达式,该正则表达式将匹配字符串中任意位置的可选#
,后跟1个以上的单词字符。
只需在正则表达式的开头添加可选的#即可支持#标签。
"Test #words".toLowerCase().match(/#?w+/g);