我有以下正则表达式:
正则表达式位于我们应用程序的一些代码中,我可以看到它分割单词。显然它删除了$#*等字符。我需要它做同样的事情,但允许使用哈希标签,因为单词现在可以有#hashtags。
"Test #words".toLowerCase().split(/\b/).filter(function(w){return w.match(/^\w+$/) }) // returns ["test", "words"]
当前的正则表达式删除了哈希值,我希望它保留。所以我得到:
["test", "#words"]
最佳答案
您的“测试#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+单词字符。
关于javascript - java脚本正则表达式过滤单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38729493/