java脚本Regex对单词进行过滤



我有以下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);

最新更新