Javascript 如何循环匹配正则表达式的所有元素?
情况如下: 我想找到与正则表达式匹配的元素 targetText=“SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext” 我在javascript中使用正则表达式,如下所示Javascript 如何循环匹配正则表达式的所有元素?,javascript,regex,Javascript,Regex,情况如下: 我想找到与正则表达式匹配的元素 targetText=“SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext” 我在javascript中使用正则表达式,如下所示 reg = new RegExp(/e(.*?)e/g); var result = reg.exec(targetText); 我只得到了第一个,但没有得到第二个。。。。 我只能得到T1,但不能得到T2,T3 尝试在字符串上使用而不是exec(),不过也可以
reg = new RegExp(/e(.*?)e/g);
var result = reg.exec(targetText);
我只得到了第一个,但没有得到第二个。。。。
我只能得到T1,但不能得到T2,T3 尝试在字符串上使用而不是exec(),不过也可以使用exec循环。Match应该一次完成所有比赛。我认为您也可以省略全局说明符
targetText = "SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext"
reg = new RegExp(/e(.*?)e/g);
var result;
while (result = reg.exec(targetText))
{
...
}
reg = new RegExp(/e(.*?)e/);
var matches = targetText.match(reg);
三种方法取决于您想用它做什么:
- 循环完成每项比赛:
- 快速循环并替换每个匹配项:
- 循环并在飞行中做一些事情:
var reg = /e(.*?)e/g;
var result;
while((result = reg.exec(targetText)) !== null) {
doSomethingWith(result);
}
每次分配给result
的对象是:
["", "", index: 50, input: "target text", groups: undefined]
因此,在我的案例中,我将上述代码编辑为:
const reg = /e(.*?)e/g;
let result = reg.exec(targetText);
while(result[0] !== "") {
doSomethingWith(result);
result = reg.exec(targetText);
}
您还可以使用String.replace方法循环所有元素
result=[];
//把所有的数字都记下来
“SomeT1extSomeT2extSomeT3ext”。替换(/(\d+?)/g,函数(wholeMatch,num){
//在这里表演或在循环之后表演。。。
console.log(result.push(num));
返回全部匹配;
});
console.log(结果);//['1', '2', '3']
问候我实际上是在处理这个问题。我更喜欢Lambda函数
reg = /e(.*?)e/gm;
var result = reg.exec(targetText);
result.forEach(element => console.log(element));
我是在一个控制台会话(Chrome)中完成的
有人能推荐一个for-loop方法吗?不要链接到w3schools。他们与W3C无关,有很多错误信息。看。@MindVirus-如果你愿意检查的话,他们已经清理了W3傻瓜网站指出的很多东西。我仍然使用它们作为一种快速的,但不是决定性的资源。就像在K&R C上使用备忘单来查找一些简单的东西一样,作为一名中级开发人员,我在W3学校已经遇到了六个明显的错误。它们不在我的参与方列表中。
String.prototype.match的MDN引用中
-不同之处在于,您不能使用String.match
,而RegExp.exec
获取捕获的组。与其使用新的RegExp,然后插入RegExp,只需执行reg=/e(.>)e/g代码>使用新运算符是多余的,除非您正在向其输入字符串。另外,请确保使用全局标志(/g)来标记此对象,否则可能会导致无限循环。请注意,在以这种方式使用之前,必须将正则表达式指定给对象:/e(.*).e/.exec(…)
将产生无限循环。@RaviParekh:您添加了/g
修饰符吗?为了子孙后代,RegExp需要在while循环之外声明;否则您仍然会得到一个无限循环。您还可以缩短while表达式:while(result=reg.exec(targetText)){
利用“false”解析。讽刺的是,我的Lint想在while表达式中用==
代替=
。要使eslint接受单个=
赋值,可以用括号括起来,如:while((result=regex.exec(targetText)))
在第二个示例中,匹配一个关键字或变量?如果它是一个变量,它包含什么?@coleperymatch
是整个RegExp匹配,而$1
是第一个捕获组()
,在该示例中,只有一个。在这里,只有replace起作用,因为在Node.js中,全局匹配/exec只返回不带组的总匹配。它不起作用。在js中,regex无法提取带有全局标志的组,因此用户将只收到总匹配。这只找到了第一个匹配。这是因为regex。您必须接受空的st用问号打电话
var reg = /e(.*?)e/g;
var result;
while((result = reg.exec(targetText)) !== null) {
doSomethingWith(result);
}
["", "", index: 50, input: "target text", groups: undefined]
const reg = /e(.*?)e/g;
let result = reg.exec(targetText);
while(result[0] !== "") {
doSomethingWith(result);
result = reg.exec(targetText);
}
reg = /e(.*?)e/gm;
var result = reg.exec(targetText);
result.forEach(element => console.log(element));
> let reg = /[aeiou]/g;
undefined
> let text = "autoeciously";
undefined
> matches = text.matches(reg);
(7) ["a", "u", "o", "e", "i", "o", "u"]
> matches.forEach(x =>console.log(x));
a
u
o
e
i
o
u