与全局标志一起使用时,Javascript正则表达式在后续调用中返回null
可能重复:与全局标志一起使用时,Javascript正则表达式在后续调用中返回null,javascript,regex,Javascript,Regex,可能重复: 我有一个正则表达式,我正在这样使用 new_regex = /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g >> /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g myregex = new RegExp(new_regex) >> /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g subject = "+39° 44' 39.28\"" >> "+
我有一个正则表达式,我正在这样使用
new_regex = /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g
>> /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g
myregex = new RegExp(new_regex)
>> /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g
subject = "+39° 44' 39.28\""
>> "+39° 44' 39.28""
我每隔一次执行以下操作时,上述操作均有效:
myregex.exec(subject)
>> ["+39° 44' 39.28", "39", "44", "39.28"]
第二次执行时,它给出null
myregex.exec(subject)
>> null
是的,
.exec
就是这样处理全局标志的。如果您将同一主题传递给它,它将前进到下一个匹配项,直到找不到匹配项并返回null
:
var str = "1111",
re = /1/g;
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str) // null
在再次执行之前,您可以通过更改主题来重置它:
re.exec("") //Will reset it.
重置示例:
var str = "1111",
re = /1/g;
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(""); //Reset
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str) // null
是的,.exec
就是这样处理全局标志的。如果您将同一主题传递给它,它将前进到下一个匹配项,直到找不到匹配项并返回null
:
var str = "1111",
re = /1/g;
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str) // null
在再次执行之前,您可以通过更改主题来重置它:
re.exec("") //Will reset it.
重置示例:
var str = "1111",
re = /1/g;
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(""); //Reset
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str); //["1"]
re.exec(str) // null
这就回答了您的问题@PhilParsons在回答中没有提到是正则表达式中的g
标志导致了这种.exec
行为。就在我写这篇文章的时候,阿普西勒一家发布了很多信息better@Esailija没有,但问题是“为什么Javascript中带有全局标志的RegExp会给出错误的结果?”这回答了您的问题@PhilParsons。答案中没有提到是regex中的g
标志导致了这种.exec
行为。就在我写这篇文章的时候,阿普西勒一家发布了很多信息better@Esailija没有,但问题是“为什么Javascript中带有全局标志的RegExp会给出错误的结果?”非常精确的解释。我明白了。这是非常精确的解释。我明白了。再来一次