Can';不理解javascript的方式';s regex工厂
为什么这个代码(): 这个代码(注意我添加了Can';不理解javascript的方式';s regex工厂,javascript,regex,Javascript,Regex,为什么这个代码(): 这个代码(注意我添加了g选项): 我甚至不明白为什么第一个代码记录为第二个匹配。如果/T:(.*)/不包含T:,那么这是如何匹配的?第二个是全局正则表达式,因此返回的数组是字符串中表达式的所有匹配项的列表。第一个不是,所以它是一个组列表,就像您从exec中得到的一样。(组0是整个匹配项,组1是唯一带括号的…组。)第二个是全局正则表达式,因此返回的数组是字符串中表达式的所有匹配项的列表。第一个不是,所以它是一个组列表,就像您从exec中得到的一样。(第0组是整个匹配项,第1组
g
选项):
我甚至不明白为什么第一个代码记录为第二个匹配。如果
/T:(.*)/
不包含T:
,那么这是如何匹配的?第二个是全局正则表达式,因此返回的数组是字符串中表达式的所有匹配项的列表。第一个不是,所以它是一个组列表,就像您从exec
中得到的一样。(组0是整个匹配项,组1是唯一带括号的…组。)第二个是全局正则表达式,因此返回的数组是字符串中表达式的所有匹配项的列表。第一个不是,所以它是一个组列表,就像您从exec
中得到的一样。(第0组是整个匹配项,第1组是唯一一个括号中的…组。)让你感到不舒服的是,在带有和不带g
标志的正则表达式中,你会得到不同的行为。调用带有标记的正则表达式的String.match
将返回String
对象中模式的所有实例的数组。例如,表达式:
“你好,世界!”。匹配(/l/g)代码>
将返回此数组:
[“l”、“l”、“l”]
但是,在不使用g
标志的情况下调用相同的函数将返回一个数组,该数组的第一个元素是匹配的模式。此后的任何元素都将匹配括号内的每个表达式。例如,表达式:
“你好,世界!”。匹配(/(地狱)哦,世界(!)/)代码>
将方便地返回此数组:
[“Hello World!”、“Hell”、“!”]
让你感到不舒服的是,在带有和不带g
标志的正则表达式中,你会得到不同的行为。调用带有标记的正则表达式的String.match
将返回String
对象中模式的所有实例的数组。例如,表达式:
“你好,世界!”。匹配(/l/g)代码>
将返回此数组:
[“l”、“l”、“l”]
但是,在不使用g
标志的情况下调用相同的函数将返回一个数组,该数组的第一个元素是匹配的模式。此后的任何元素都将匹配括号内的每个表达式。例如,表达式:
“你好,世界!”。匹配(/(地狱)哦,世界(!)/)代码>
将方便地返回此数组:
[“你好,世界!”,“地狱”,“!”]
奖金问题:你如何得到一个组列表,就像OP半预期的那样?@cHao:exec
在循环中或替换
,我想<代码>替换
很有趣:var result=[];replace(regex2,function(){result.push.apply(result,arguments);})代码>奖金问题:你如何得到一个组列表,就像OP半预期的那样?@cHao:exec
在循环中还是replace
,我想<代码>替换
很有趣:var result=[];replace(regex2,function(){result.push.apply(result,arguments);})代码>
var text = "T: 01202 870738";
var regex1 = /T: (.*)/;
var matches1 = text.match(regex1);
for(var i = 0; i < matches1.length; i++) {
log("[" + i + "]: " + matches1[i]);
}
[0]: T: 01202 870738
[1]: 01202 870738
var regex2 = /T: (.*)/g;
var matches2 = text.match(regex2);
for(var i = 0; i < matches2.length; i++) {
log("[" + i + "]: " + matches2[i]);
}
[0]: T: 01202 870738