因此,为了匹配文本页面中的所有单词,我使用了这个:
new RegExp("([a-zA-Z0-9\-]+)","ig");
问题是,我需要匹配的一些东西可能是两个词,比如"绿茶"例如。所以我尝试了这个:
var pattern = new RegExp("([a-zA-Z0-9\-?]+\\s[a-zA-Z0-9\-_]+)","ig");
但问题在于它并不匹配每一个双字组合,所以它可能会匹配"绿色","茶叶"。我认为至少它是如何运作的,我所知道的是它与绿茶不匹配#34;。
答案 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中调整味道。
希望这有帮助!