如何在string.match中添加循环值?

时间:2018-09-17 14:10:06

标签: javascript arrays regex loops

如何遍历字符串并在match方法中将其值添加到regex中。我正在空。 尝试过/'str[i]'/g,并且也给出了null。

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
  regResult = str.match(/str[i]/g); //gives null
};

4 个答案:

答案 0 :(得分:1)

现在,您的正则表达式匹配str,后跟一个i范围内的单个字符-一个单独的i,这意味着它将匹配stri。要匹配变量i,请尝试以下操作:

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
  regResult = str.match(new RegExp('str' + i, 'g')); //gives null
};

在这里,我们正在创建一个正则表达式,其模式包含变量i的当前值。例如,如果i为4,则将构造正则表达式,就像您将/str4/g赋予str.match一样。

编辑

为了反映对该问题的编辑,我提出的新解决方案如下:

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
  regResult = str.match(new RegExp(str[i], 'g')); //gives null
};

此代码与上面的代码不同之处在于,它正在从i中读取值str。例如,如果i为4且str[4] = "h",则将构造正则表达式,就好像您只是将str[4]的值赋予str.matchstr.match(/h/g)

答案 1 :(得分:1)

可能您只需要一点修复

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
    regResult = str.match(new RegExp(str[i], 'g'));
    console.log(regResult)
};

答案 2 :(得分:1)

// static RegExp -> /str[i]/g is just equal "str[i]"
// dynamic RegExp -> new RegExp(str[i], "g") is str[i] h,e,l,l, ...

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
  regResult = str.match(new RegExp(str[i], "g")); //gives null
  console.log(regResult);
};

答案 3 :(得分:1)

您需要使用 new RegExp() constructor ,以便可以使用迭代的string动态创建正则表达式:

str.match(new RegExp(str[i],'g'))

但是,如果您尝试获取array中每个字母的匹配string,则需要push matches中的regResult数组而不仅仅是在每次迭代中都覆盖其值:

regResult.push(str.match(new RegExp(str[i], 'g'))); //gives null

演示:

var str = "helloWorld";
var regResult = [];

for (var i = 0; i < str.length; i++) {
  regResult.push(str.match(new RegExp(str[i], 'g'))); //gives null
};
console.log(regResult);