从文本中获取所有单词,包括这些单词所附的任何特殊字符

时间:2018-07-20 00:09:46

标签: javascript regex

我有这样的文字:

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

4 个答案:

答案 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

它在起作用-https://regex101.com/r/Oj2Vhw/2/