匹配单词与空格

时间:2016-06-26 21:16:25

标签: javascript regex

因此,为了匹配文本页面中的所有单词,我使用了这个:

new RegExp("([a-zA-Z0-9\-]+)","ig");

问题是,我需要匹配的一些东西可能是两个词,比如"绿茶"例如。所以我尝试了这个:

var pattern = new RegExp("([a-zA-Z0-9\-?]+\\s[a-zA-Z0-9\-_]+)","ig");

但问题在于它并不匹配每一个双字组合,所以它可能会匹配"绿色","茶叶"。我认为至少它是如何运作的,我所知道的是它与绿茶不匹配#34;。

2 个答案:

答案 0 :(得分:1)

这里没有神奇的药丸,因为正则表达式引擎无法知道“绿茶”这两个词在一起但是“绿色”没有,所以你需要列出你所有的单词组合希望它作为一个整体来对待 - 或者在事实之前或之后做一些事情。

例如,这将匹配文字中的单词,但将“绿茶”视为单个匹配:

var rex = /(green tea)|([a-zA-Z0-9\-']+)/ig;
var str = "I like green tea, don't you?";
console.log(str.match(rex));

|交替,意思是“尝试匹配任何这些替代方案”(之前的替代方案优先于以后的替代方案)。

显然,这会很快变得麻烦,所以你可能需要超越正则表达式,预处理或后处理来处理你想要的双字“单词列表。”

注意:我在后半部分添加了',否则“不要”被读作“don”和“t”。

答案 1 :(得分:0)

首先,regexp101一如既往地是你的朋友! :)

其次,[a-zA-z0-9]相当于\ w。如果你想添加破折号和问号你对“单词”的定义(就像你看到的那样),你可以使用[\ w-?]。

最后,你可能想要一个像这样的非捕获组:

'((?:[\w-?]+(?:\s[\w-?]+)*))'

表示“找到一个单词,然后是零个或多个'空格字符+单词'组”。

在regex101中调整味道。

希望这有帮助!