【问题标题】:regexp logic and or正则表达式逻辑和或
【发布时间】:2011-03-03 03:38:32
【问题描述】:

我知道有诸如|“OR 运算符”之类的逻辑运算符可以这样使用:

earth|world

我想知道如何检查我的字符串是否包含地球和世界。

问候, 亚历山大

【问题讨论】:

标签: javascript regex


【解决方案1】:

如果它包含地球和世界,它包含一个接一个,所以:

earth.*world|world.*earth

一个较短的替代方案(使用扩展的正则表达式语法)是:

/(?=.*earth)(?=.*world).*/

但它一点也不像and 运算符。你只能做or,因为如果只包含一个单词,则不涉及排序。如果您想同时拥有它们,则需要指明顺序。

【讨论】:

  • 我不会将第二个版本称为 hackish - 相反,特别是如果涉及两个以上的条件,我发现顺序前瞻要简单得多。
  • 那个正则表达式看起来性能很差,/^(?=.*?earth)(?=.*?world)/ 会更好。
【解决方案2】:

这里提出并回答了这个问题:

Regular Expressions: Is there an AND operator?

没有直接的“与”运算符,但您可以继续进行表达式测试并确保第二个表达式也是匹配的。

【讨论】:

    【解决方案3】:

    做两个测试,如果第一个失败,第二个不在 javascript 中执行。例如

    var hasBoth = /earth/i.test(aString) && /world/i.test(aString);
    

    【讨论】:

    • 并不总是很方便,如果知道如何使用一个正则表达式来做到这一点会很高兴
    【解决方案4】:

    你实际上不需要 & 运算符 |操作员完成工作

    let string = 'world and earth are awesome';
    let regex = /world|earth/ig;
    
    let result = string.replace(regex, '...');
    
    console.log(string);
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      相关资源
      最近更新 更多