【问题标题】:How to put variable in regular expression match?如何将变量放入正则表达式匹配中?
【发布时间】:2011-10-26 13:54:48
【问题描述】:

我有以下sn-p。想找a的样子,但是不行。如何正确放置变量?

var string1 = 'asdgghjajakhakhdsadsafdgawerwweadf';
var string2 = 'a';
string1.match('/' + string2 + '/g').length;

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您需要使用 RegExp 构造函数而不是正则表达式文字。

    var string = 'asdgghjjkhkh';
    var string2 = 'a';
    var regex = new RegExp( string2, 'g' );
    string.match(regex);
    

    如果您不需要全局修饰符,那么您只需传递string2.match() 将为您创建正则表达式。

    string.match( string2 );
    

    【讨论】:

    • 您可能希望将变量与字符串组合。在这种情况下,任何转义字符都应该被双重转义。如果你想匹配一个“a”后跟一个数字:var str = "abca1cba3a"; var search = "a"; var re = new RegExp (search + '\\d', 'g'); str.match(re); // result: ['a1', 'a3']
    【解决方案2】:

    如果您只是想检查一个字符串是否包含另一个字符串,那么最好的办法就是使用不带正则表达式的match()

    您可能会反对:但我需要一个正则表达式来检查类,例如 \s,以定义复杂的模式等。

    在这种情况下:您将需要进一步更改语法,双重转义您的类并删除开始/结束 / 正则表达式指示符号。

    想象一下这个正则表达式...

    someString.match(/\bcool|tubular\b);
    

    当使用新的new RegExp() 时,与此完全等价的是...

    someStringRegex = new RegExp('\\bcool|tubular\\b');
    

    在这个过渡过程中发生了两件事:

    • 删除/ 的开头和结尾(否则,您的正则表达式将失败)。
    • 双重转义您的字符类,例如 \b 变为 \\b 用于单词边框,\w 变为 \\w 用于空格等(否则,您的正则表达式将失败)。

    【讨论】:

      【解决方案3】:

      这是另一个例子- //确认字符串末尾是否包含target(都是下面函数中的变量,例如确认str“Abstraction”末尾是否包含target“action”)。

      function confirmEnding(string, target) {
          let regex = new RegExp(target);
          return regex.test(string);
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-06
        • 2011-08-08
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多