如何通过正则表达式完成要求

时间:2016-06-08 07:01:56

标签: javascript regex

有一个字符串:

python php ruby javascript jsonp perhapsphpisoutdated

我想返回包含p但不包含ph的字词 如:

[ 'python', 'javascript', 'jsonp' ]

怎么写呢?

 var result = web_development.match(/\b((?!ph)\w)+\b/g);

到目前为止,我不知道如何写更多,请帮助我!

4 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

+?

说明:OR匹配前的左侧部分在没有' p'的情况下工作。正确的部分首先匹配一个没有' p'的可选前缀,然后是任何数量的' p',然后是' h'然后是没有' ; p&#39 ;;最后一个可选的' p'没有任何事情可以发生。

答案 1 :(得分:0)

在python中,它可以像这样完成

import re
sample_string = "python php ruby javascript jsonp perhapsphpisoutdated"
regex=r"^((?!ph).)*$"
print [word for word in sample_string.split() if re.search(regex,word)]

答案 2 :(得分:0)

选择以下方法之一:

  • 使用String.replace的第一种方法(用事先替换ph序列与空字符串""的单词)和String.match函数(以匹配其余的单词如果包含p个字符):

    var web_development = "python php ruby javascript jsonp perhapsphpisoutdated",
        result = web_development
                        .replace(/\b[a-z]+?ph([a-z]+)?\b|\bph[a-z]+?\b/g, "")
                        .match(/\b([a-z]+?)?[p]([a-z]+?)?\b/g);
    
    console.log(result);   // ["python", "javascript", "jsonp"]
    
  • 使用String.splitArray.filter函数的第二种方法:

    result = web_development.split(" ").filter(function(word){
        return word.indexOf("p") !== -1 && word.indexOf("ph") === -1;
    });
    
    console.log(result);   // ["python", "javascript", "jsonp"]
    

答案 3 :(得分:0)

var reg = /\b(?=\w*p)(?!\w*ph)\w+\b/g; console.log(web_development.match(reg)); 最后我得到了解决方案......很难解决问题