首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex匹配未在前面或后面加上其他字符的确切单词。

Regex匹配未在前面或后面加上其他字符的确切单词。
EN

Stack Overflow用户
提问于 2016-01-07 20:36:09
回答 4查看 1.8K关注 0票数 3

我试图为匹配一组单词做一个判断。

例如,如果我匹配一组单词- American Tea

那么在字符串American Tea is awesome. Do you like American Tea? love WowAmerican Tea #American Tea中只有两个匹配,

美式茶太棒了。”你喜欢美式茶吗?爱WowAmerican茶#美国茶‘

所以,我只试着做完全匹配的词集。

我尝试了一些方法,但没有得到正确的regex :(如果有人可以帮助或指出我的方向,这将是非常有帮助的。)

查一下这个

'American Tea lalalal qwqwqw American Tea sdsdsd #American Tea'.match(/(?:^|\s)(American Tea)(?=\s|$)/g)

其结果是["American Tea", " American Tea"]

我不想要第二场比赛的空间,我希望比赛结果是["American Tea", "American Tea"]

(在第二个美国茶前没有空间)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-07 20:57:04

利用.replace()获取乐趣和利润

代码语言:javascript
复制
/(?:^|\s)(american tea)/ig

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

如果您想说明前缀后缀:

代码语言:javascript
复制
/(?:^|\s)(american tea)(?:\W|$)/ig 

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

JSBIN实例

代码语言:javascript
复制
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"

编辑:

以上只返回匹配项,如果要保留捕获和匹配前缀和后缀,请使用以及

代码语言:javascript
复制
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;
代码语言:javascript
复制
<div id="result"></div>

在那里p艺术

  • p1是第一个匹配组(任何前缀)
  • p2是第二个匹配组(“美国茶”)
  • p3是第三个匹配组(任何后缀)
票数 2
EN

Stack Overflow用户

发布于 2016-01-07 20:46:54

读了这些评论后,我意识到正则表达式可能不是最好的解决方案。但是,如何避免Javascript不支持有利的外观(这将使任务变得更容易)这一事实是非常重要的。

如果JS有(?<=.)构造,然后您只需使用正向后和正向前看,并列出所有字符,您希望允许左和右的美国茶。我们想要的是这样的东西:

代码语言:javascript
复制
(?<=\s|\.|,|:|;|\?|\!|^)American Tea(?=\s|\.|,|:|;|\?|\!|$)

在左边,您将允许任何列出的字符和字符串^的开始。在右边,允许使用相同的字符和字符串$的结尾。

但是Javascript没有(?<=.)构造。所以我们得有一点创意:

代码语言:javascript
复制
(?=(\s|\.|,|:|;|\?|\!|^))\1(American Tea)(?=\s|\.|,|:|;|\?|\!|$)

这个正则表达式用正前瞻代替了正后视。然后,它将它在展望中发现的任何东西与\1相匹配,最后美国茶将在第一组中被捕获。

演示:https://regex101.com/r/qX9qR3/3

票数 0
EN

Stack Overflow用户

发布于 2016-01-07 20:48:45

你不需要用正则表达式来匹配单词。

我知道一个非常整洁的CoffeeScript片段:

代码语言:javascript
复制
wordList = ["coffeescript", "eko", "talking", "play framework", "and stuff", "falsy"]
tweet = "This is an example tweet talking about javascript and stuff."

wordList.some (word) -> ~tweet.indexOf word # returns true

它编译成以下javascript:

代码语言:javascript
复制
var tweet, wordList;

wordList = ["coffeescript", "eko", "talking", "play framework", "and stuff", "falsy"];

tweet = "This is an example tweet talking about javascript and stuff.";

wordList.some(function(word) { // returns true
  return ~tweet.indexOf(word); 
});

~不是CoffeeScript中的一个特殊运算符,只是一个很酷的把戏。它是位NOT运算符,反转其操作数的位。在实践中,它等同于-x-1。在这里,它的工作原理是,我们希望检查一个大于-1的索引,并且-(-1)-1 == 0计算结果为false。

如果要匹配的单词,请使用:

代码语言:javascript
复制
wordList.filter (word) -> ~tweet.indexOf word # returns : [ "talking", "and stuff" ]

在JS中也是如此:

代码语言:javascript
复制
wordList.filter(function(word) { // returns : [ "talking", "and stuff" ]
  return ~tweet.indexOf(word);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34664662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档