【问题标题】:JavaScript - Use variable in string matchJavaScript - 在字符串匹配中使用变量
【发布时间】:2011-03-11 12:30:31
【问题描述】:

我发现了几个类似的问题,但对我没有帮助。所以我有这个问题:

var xxx = "victoria";
var yyy = "i";
alert(xxx.match(yyy/g).length);

我不知道如何在 match 命令中传递变量。请帮忙。谢谢。

【问题讨论】:

  • How do you pass a variable to a Regular Expression JavaScript? 的完全相同的副本。搜索更多;)
  • 还有一件事:如果您使用变量来构造正则表达式,则应注意该变量可能包含正则表达式特殊字符。例如如果你通过“c++”,正则表达式编译器会抱怨SyntaxError: Invalid regular expression: /c++/: Nothing to repeat

标签: javascript variables match


【解决方案1】:

例如:

let myString = "Hello World"
let myMatch = myString.match(/H.*/)
console.log(myMatch)

或者

let myString = "Hello World"
let myVariable = "H"
let myReg = new RegExp(myVariable + ".*")
let myMatch = myString.match(myReg)
console.log(myMatch)

【讨论】:

    【解决方案2】:

    示例。查找字符串中元音的数量

    var word='Web Development Tutorial';
    var vowels='[aeiou]'; 
    var re = new RegExp(vowels, 'gi');
    var arr = word.match(re);
    document.write(arr.length);
    

    【讨论】:

      【解决方案3】:

      无论如何,对我来说,看到它被使用会有所帮助。 刚刚使用“re”示例进行了此操作:

      var analyte_data = 'sample-'+sample_id;
      var storage_keys = $.jStorage.index();
      var re = new RegExp( analyte_data,'g');  
      for(i=0;i<storage_keys.length;i++) { 
          if(storage_keys[i].match(re)) {
              console.log(storage_keys[i]);
              var partnum = storage_keys[i].split('-')[2];
          }
      }
      

      【讨论】:

        【解决方案4】:

        如果你的模式是字符串,你必须使用RegExp object

        var xxx = "victoria";
        var yyy = "i";
        var rgxp = new RegExp(yyy, "g");
        alert(xxx.match(rgxp).length);
        

        如果模式不是动态字符串:

        var xxx = "victoria";
        var yyy = /i/g;
        alert(xxx.match(yyy).length);
        

        【讨论】:

        【解决方案5】:

        虽然 match 函数不接受字符串文字作为正则表达式模式,但您可以使用 RegExp 对象的构造函数并将其传递给 String.match 函数:

        var re = new RegExp(yyy, 'g');
        xxx.match(re);
        

        您需要的任何标志(例如 /g)都可以进入第二个参数。

        【讨论】:

        • +1,这是首选方式,顺便说一句,如果传递给match 方法的参数不是RegExp 对象,则在内部将使用该值调用RegExp 构造函数,所以你可以使用字符串模式,例如:"a123".match("\\d+")[0] === "123";
        【解决方案6】:
        xxx.match(yyy, 'g').length
        

        【讨论】:

        • 在 Firefox 中有效,甚至没有记录。规范声明String.prototype.match 方法只需要一个参数。正如@Chris 建议的那样,使用RegExp 构造函数是首选方式。
        猜你喜欢
        • 2014-06-22
        • 2011-10-23
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 2020-04-06
        • 2016-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多