Я играл вокруг с регулярными выражениями в JS в первый раз, и я пытался в течение долгого времени, чтобы сделать что-то подобное с регулярным выражением буквально, страница не будет загружаться и в конечном счете крах:Нельзя использовать литерал регулярного выражения для regex.exec()?
var string = "12453828378123898728912382123833";
var match;
while(match = /123(\d)/g.exec(string)) {
console.log(match[1]);
}
Однако , если я ставлю буквальным в переменную, то он работал просто отлично:
var string = "12453828378123898728912382123833";
var match;
var regex = /123(\d)/g;
while(match = regex.exec(string)) {
console.log(match[1]);
}
Выход:
8
8
8
Почему это происходит? Я немного новичок JS, и мне действительно не нужно это знать, но мне любопытно.
возможно дубликат [В чем разница между Exec РегВыра() функцией и соответствием строки (в) функциях?] (Http://stackoverflow.com/questions/9214754/what-is-the-difference-between -regexp-s-exec-function-and-string-s-match-fun) – Anonymous
Я угадываю каждую оценку литералов как новый объект regexp, и сам объект хранит историю для этого цикла, поэтому используя один кешированный объект поддерживает историю, используя литерал на месте - это как начинать с нуля каждый раз. – ShadowRanger
@ Не знаю, почему это дубликат? Это не связано с функцией match(). У этого есть литералы, но его ответы действительно не объясняют, почему литералы не могут быть использованы. –