说,
str = 'python php ruby javascript jsonp perhapsphpisoutdated'
如何使用正则表达式查找包含p
但不包含ph
的所有字词?
我知道如何使用split
& filter
解决问题:
str.split(' ')
.filter( w=>w.includes('p') && !w.includes('ph') )
是否有可能的正则表达方式?
答案 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字母。
<强>可视化强>:
答案 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执行法规
var str = 'python php ruby javascript jsonp perhapsphpisoutdated';
var res=str.split(' ').filter( w=> !w.includes('ph') && w.includes('p') )
console.log(res);
&#13;