如何遍历字符串并在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
};
答案 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.match
:str.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);