Javascript 查找所有包含'p'但不包含'ph'的单词`

Javascript 查找所有包含'p'但不包含'ph'的单词`,javascript,regex,Javascript,Regex,说 如何使用正则表达式查找包含p但不包含ph的所有单词 我知道如何使用split和filter解决这个问题: str = 'python php ruby javascript jsonp perhapsphpisoutdated' 有可能的正则表达式方法吗?您可以使用以下解决方案: var str='python-php-ruby-javascript-jsonp-perhapphis'; var res=str.match(/\b(?!\w*ph)\w*p\w*/g); 控制台日志(re

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

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

str = 'python php ruby javascript jsonp perhapsphpisoutdated'

有可能的正则表达式方法吗?

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

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

控制台日志(res)这实际上可以通过多种不同的方式实现。我建议您使用并查看量词和匹配。你也可以阅读《展望未来》

这里有几个想法

p{1}h{0}
这表示正是1p后跟正是0h

p[^h]
这表示p后跟任何非h的内容(这与“p”本身不匹配)

p(?!h)
我最喜欢这个,因为它使用了Regex的前瞻功能。上面写着p,后面是h吗?不那就好了

祝你好运

不匹配任何包含“ph”或不包含“p”的单词


我给你的是可执行代码,我交换的序列!w、 包括('ph')&w。包括('p')。以及statment的javascript执行

var str='python-php-ruby-javascript-jsonp-perhapphis';
var res=str.split(“”).filter(w=>!w.includes('ph')&&w.includes('p'))

控制台日志(res)这里的正确答案是什么?@WiktorStribiżew这个问题还不够清楚吗?我的意思是,如果这个词后面包含
p
而后面没有
h
,并且
ph
,那么这个词必须忽略吗?我现在得到了3。用这个作为一个简单的测试。你会用“预言”这个词来匹配吗?有一个p,也有一个ph。如果wiktor是对的,那么你会排除这个词,因为它包含一个ph。再看看你的问题,我倾向于同意。我的解决方案(如果你想在一个单词中寻找这个模式)将与预言相匹配,因为有一个p没有ph值,单词后面的ph值是不相关的。试试看,这将跳过所有包含“ph”的单词,这也是我想用的,但是它似乎也应该被排除在计数之外,因为它包含
ph
。我可能没有正确理解您的要求。我本以为这是允许的,因为它与p匹配。我想排除ph的任何用法,但是如果你想排除任何包含ph的单词,那么Wiktor的解决方案更好。
/p{1}h{0}/
的语义与
/p/
完全相同
{0}
只在支持子例程调用的风格中有用(JavaScript不支持),而
{1}
是纯噪声。同意,但我的观点是,使用多个正则表达式可以获得效果。你会注意到我只做了一次是为了学究。我的观点是,
h{0}
不会阻止匹配,如果有一个
h
,比如
(?!h)
。它没有任何作用。如果使用
{0}
量化某个内容,则可以有效地将其从regex.FYI中删除,如下所示。为了不区分大小写,请使用
/\b(?!\w*ph)\w*p\w*/gi
好吧,我把这个问题理解为“获取单词的计数”
。如果要提取单词本身,那么长度是多余的。谢谢,@jcubic.Neat image。什么系统/网站给了你这个输出。我可以把它用于其他目的。这正是OP已经在做的事情。问题是如何用正则表达式做同样的事情。
str.split(' ')
  .filter( w=>w.includes('p') && !w.includes('ph') )
\b(?:p(?!h)|[^p\s])*?p(?!h)(?:p(?!h)|[^p\s])*?\b