找到包含`p`但不包含`ph`的所有单词

时间:2016-09-19 10:25:27

标签: javascript regex

说,

str = 'python php ruby javascript jsonp perhapsphpisoutdated'

如何使用正则表达式查找包含p但不包含ph的所有字词?

我知道如何使用split& filter解决问题:

str.split(' ')
  .filter( w=>w.includes('p') && !w.includes('ph') )

是否有可能的正则表达方式?

4 个答案:

答案 0 :(得分:9)

您可以使用以下解决方案:

var str = 'python php ruby javascript jsonp perhapsphpisoutdated';
var res = str.match(/\b(?!\w*ph)\w*p\w*/g);
console.log(res);

<强>描述

  • \b - 领先的字边界
  • (?!\w*ph) - 一个否定前瞻要求在前导词边界之后出现的0+字符之后不能有ph
  • \w* - 0+ word chars
  • p - 一封信p
  • \w* - 0+ word chars。

注意 \w匹配的字母,数字和下划线可以替换为[a-zA-Z],仅匹配ASCII字母。

<强>可视化

https://jex.im/regulex/#!embed=false&flags=&re=%5Cb(%3F!%5Cw*ph)%5Cw*p%5Cw*

答案 1 :(得分:1)

这实际上是你可以通过多种不同的方式做的事情。我建议你使用https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/并查看量词和匹配。您也可以预先了解http://www.regular-expressions.info/lookaround.html

以下是一些想法。

p{1}h{0}这恰好说1 p后跟0 h

p[^h]这说p后跟任何不是h的东西(这不会匹配&#34; p&#34;本身)

p(?!h)我喜欢这个最佳,因为它使用了正则表达式的前瞻功能。它说p,接下来是&#39; h&#39;没有?那很好。

祝你好运。

答案 2 :(得分:0)

This不匹配任何包含&#34; ph&#34;或者不包含&#34; p&#34;。

\b(?:p(?!h)|[^p\s])*?p(?!h)(?:p(?!h)|[^p\s])*?\b

答案 3 :(得分:0)

我正在给你可执行代码,我交换了!w.includes(&#39; ph&#39;)&amp;的序列。 w.includes(&#39; P&#39)。和javascript执行法规

&#13;
&#13;
var str = 'python php ruby javascript jsonp perhapsphpisoutdated';
var res=str.split(' ').filter( w=> !w.includes('ph') && w.includes('p') )
console.log(res);
&#13;
&#13;
&#13;