This question already has answers here:
Regex whitespace word boundary

(3个答案)


在4个月前关闭。




即时通讯试图使正则表达式匹配一组单词。

例如,如果我匹配一组单词-American Tea
然后在字符串American Tea is awesome. Do you like American Tea? love WowAmerican Tea #American Tea中,这里只有2个匹配项,

'美国茶很棒。您喜欢美国茶吗?爱哇美国茶#美国茶'

因此,我正在尝试只对单词集进行完全匹配。

我尝试了一些方法,但是还没有正确的正则表达式:(
如果有人可以帮助或可以指出我的方向,那将真的很有帮助。

检查一下
'American Tea lalalal qwqwqw American Tea sdsdsd #American Tea'.match(/(?:^|\s)(American Tea)(?=\s|$)/g)
结果是["American Tea", " American Tea"]
我不希望第二场比赛中有空格,我希望比赛结果为["American Tea", "American Tea"]
(第二个美国茶会前没有空间)

最佳答案

使用.replace()获得乐趣和 yield

/(?:^|\s)(american tea)/ig

https://regex101.com/r/qB0uO2/1

如果要考虑前缀后缀:
/(?:^|\s)(american tea)(?:\W|$)/ig

https://regex101.com/r/qB0uO2/2

JSBIN EXAMPLE
var str = "American Tea is awesome. Do you like American Tea? love WowAmerican Tea #American Tea";

str.replace(/(?:^|\s)(american tea)(?:\W|$)/ig, function(i, m){
  console.log(m);
});

//"American Tea"
//"American Tea"

编辑:

上面的代码仅返回匹配项,如果您想保留捕获和匹配的前缀和后缀,请使用捕获组以及:

var str = "American Tea is awesome. Do you like American Tea? love WowAmerican Tea #American Tea";

var newStr = str.replace(/(^|\s)(american tea)(\W|$)/ig, function(im, p1, p2, p3){
  return  p1 +"<b>"+ p2 +"</b>"+ p3; // p1 and p3 will help preserve the pref/suffix
});

document.getElementById("result").innerHTML = newStr;
<div id="result"></div>

p艺术在哪里
  • p1是第一个匹配组(任何前缀)
  • p2是第二个匹配组(“美国茶”一词)
  • p3是第三个匹配组(任何后缀)
  • 10-08 05:43