我有这样的文字:
Here is some text.
#note Remember to look into specs #
And here is some more text.
我可以使用以下命令获取文本中的所有单词(str是所有文本):
str.match(/\w+/g)
这提供了一个包含所有单词的数组,但是标签已从 note 单词中删除:
Here,is,some,text,note,Remember,to,look,into,specs,And,here,is,some,more,text
如何获得此结果,以便在其所附单词上包含井号?
期望的结果:Here,is,some,text,#note,Remember,to,look,into,specs,And,here,is,some,more,text
答案 0 :(得分:2)
您可以通过在正则表达式中添加.?
来实现此目的。
?
是一个特殊字符,表示“零或其中之一”,而.
表示任何字符(特殊或非特殊)。
.?
的组合因此松散地表示“在单词开头匹配可选的特殊字符”:
str.match(/.?\w+/g)
这里的假设是,您只想在单词的开头匹配特殊字符(即,可选地以开头的某些特殊字符)。您可以在正则表达式at the MDN documentation
中详细了解?
的行为
答案 1 :(得分:2)
一种替代方法是使用此正则表达式(.+?\w+)
,该正则表达式在单词之前或仅单词之前查找任意数量的字符。这种方法也可以获取空格,因此,函数map
会删除这些空格。
一些解释: https://regex101.com/r/fEBDeY/1
console.log(`Here is some text.
#note Remember to look into ****specs #
And here is some more text.`.match(/(.+?\w+)/g).map(s => s.trim()));
.as-console-wrapper { max-height: 100% !important; top: 0; }
另一种方法是使用接收正则表达式的函数split
,此方法使用此\s+
将字符串按空格分隔。
console.log(`Here is some text.
#note Remember to look into ****specs #
And here is some more text.`.split(/\s+/g));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
这是因为\w
元字符用于查找单词字符。
如果要包含每个字符,则可以使用.
元字符来查找单个字符(换行符或其他行终止符除外):
str.match(/./g)
答案 3 :(得分:0)
您可以匹配非空白字符-/(\S\w+)/gm
。