首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改regex以匹配某些单词,而不是所有包含PRP的单词。

问更改regex以匹配某些单词,而不是所有包含PRP的单词。
EN

Stack Overflow用户
提问于 2014-06-17 16:20:46
回答 2查看 72关注 0票数 1

如果单词包含PRP,则此正则表达式匹配空格之间的所有字符。

如果它们包含PRP,但在任何情况下都包含me,我如何才能使其匹配所有的单词或介于白色之间的字符。

所以匹配所有包含PRP的单词,但不包含我或我。

下面是匹配包含PRP:\S*PRP\S*的单词的正则表达式

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-17 16:24:55

您可以对此使用负面展望:

代码语言:javascript
复制
(?:^|\s)((?!\S*?(?:ME|me))\S*?PRP\S*)

工作演示

PS:使用组#1作为匹配的单词。

代码:

代码语言:javascript
复制
var re = /(?:^|\s)((?!\S*?(?:ME|me))\S*?PRP\S*)/;    
var s = 'word abcPRP def';

var m = s.match(re);    
if (m) console.log(m[1]); //=> abcPRP
票数 2
EN

Stack Overflow用户

发布于 2014-06-17 17:17:56

与其使用复杂的正则表达式(这对几乎所有正在阅读的人来说都是令人困惑的),不如将代码分成两部分,将单词分割成数组,然后用不想要的东西过滤结果。

代码语言:javascript
复制
function prpnotme(w) {
  var r = w.match(/\S+/g);
  if(r == null)
    return [];
  var i=0;
  while(i<r.length) {
    if(!r[i].contains('PRP') || r[i].toLowerCase().contains('me'))
      r.splice(i,1);
    else
      i++;
  }
  return r;
}
console.log(prpnotme('whattttttt ok')); // []
console.log(prpnotme('MELOLPRP PRPRP PRPthemeok PRPmhm')); // ['PRPRP', 'PRPmhm']

为了一个非常好的理由,为什么这是重要的,想象一下,如果你想要增加更多的逻辑。在修改复杂的正则表达式使其更加复杂时,您更有可能犯错误,这样做是用简单的逻辑完成的,无论您添加了多少谓词,在读取每个谓词时都是非常有意义的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24268809

复制
相关文章

相似问题

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