java-script对单词进行正则表达式过滤

时间:2016-08-02 20:03:42

标签: javascript regex

我有以下正则表达式:

正则表达式在我们的应用程序中有一些代码,我可以看到它分裂了单词。它显然删除了诸如$#*之类的字符。我需要它完全做同样的事情,但允许一个哈希标记,因为这些单词现在可以有#hashtags。

"Test #words".toLowerCase().split(/\b/).filter(function(w){return w.match(/^\w+$/) }) // returns ["test", "words"]

当前正则表达式删除哈希,我希望它保留。所以我明白了:

["test", "#words"] 

2 个答案:

答案 0 :(得分:1)

您的"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+ - 一个或多个字词字符(来自[a-zA-Z0-9_]范围)

如果上下文不那么重要,请使用更简单的/#?\w+/g正则表达式,该正则表达式将匹配字符串中任意位置的可选#,后跟1个字符字符。

答案 1 :(得分:0)

只需在正则表达式的开头添加可选#即可支持#hashtags。

"Test #words".toLowerCase().match(/#?\w+/g);