【问题标题】:How can I check if a string contains a given set of characters (disregarding order) using Regex?如何使用正则表达式检查字符串是否包含给定的字符集(不考虑顺序)?
【发布时间】:2015-07-06 15:50:58
【问题描述】:

我正在尝试编写一个正则表达式来检查给定的字符串是否包含一组字符,但是,字符串必须包含所有字符,而不管出现的顺序。 例如:

var myString = "howdyhow";
var toMatch = "hyo";

字符串 myString 包含字符串 toMatch 的所有字符。 我需要的是类似于正则表达式 [hyo] 的东西,但不是匹配 h OR y OR o 的出现,我需要它来匹配 h AND y AND o 的出现(忽略字符之间的顺序或“距离”)。

【问题讨论】:

  • 恐怕正则表达式不能满足这种需要,我想你必须遍历 toMatch 的每个字符并检查它是否存在于 myString 中。
  • 'var' 在您的示例中表明您正在使用编程语言。因此,只需 3 个 RE(/h/、/y/ /o/)并使用 AND 子句。

标签: regex string regex-lookarounds


【解决方案1】:

您可以从第二个字符串和调用 RegExp.test 方法构造一个基于 lookahead 的正则表达式:

var re = new RegExp( toMatch.split('').map(function(item) { 
              return "(?=.*?" + item + ")"; }).join('') );
//=> re = /(?=.*?h)(?=.*?y)(?=.*?o)/

var matched = re.test(myString);

/(?=.*?h)(?=.*?y)(?=.*?o)/ 中的前瞻将确保第二个字符串的所有字符都在第一个字符串中匹配,无论它们的位置如何。

【讨论】:

    【解决方案2】:

    我知道它不是正则表达式,但我个人会使用Contains

    if(value.Contains("h") && value.Contains("y") & value.Contains("o")) {}
    

    【讨论】:

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