Статьи

Использование jQuery .exec () и .compile () Regex

Если вы много работаете с регулярными выражениями JavaScript (как и я), это стоит знать. Для тех из вас, кто не знает, метод exec () просто проверяет совпадение в строке и возвращает сопоставленный текст, если находит совпадение, в противном случае возвращает нуль.

/* match just the href of js includes */ var jsSrcRegex = /src="(.+?)"/igm; /* html for js include */ var html = ' '; console.log(jsSrcRegex.exec(html)); console.log(html); console.log(jsSrcRegex); console.log(jsSrcRegex.exec(html)); /* match just the href of js includes */ var jsSrcRegex = /src="(.+?)"/igm; /* html for js include */ var html = ' '; console.log(jsSrcRegex.exec(html)); console.log(html); console.log(jsSrcRegex); console.log(jsSrcRegex.exec(html)); 

regex-compile1

Нет результатов а ?! Интересно, если мы добавим дополнительный console.log и… результаты вернутся! хмм …

regex-compile2

regex.compile () решает проблему

Теперь, если вы используете .compile () в регулярном выражении, это работает!

 /* match just the href of js includes */ var jsSrcRegex = /src="(.+?)"/igm; /* html for js include */ var html = ' '; console.log(jsSrcRegex.exec(html)); /* recompile the regex */ jsSrcRegex.compile(jsSrcRegex); console.log(html); console.log(jsSrcRegex); console.log(jsSrcRegex.exec(html)); /* match just the href of js includes */ var jsSrcRegex = /src="(.+?)"/igm; /* html for js include */ var html = ' '; console.log(jsSrcRegex.exec(html)); /* recompile the regex */ jsSrcRegex.compile(jsSrcRegex); console.log(html); console.log(jsSrcRegex); console.log(jsSrcRegex.exec(html)); 

Как видите, массив результатов найден после перекомпиляции.

regex-compile3

Он в основном компилирует / перекомпилирует регулярное выражение во время выполнения кода, поэтому, как правило, если вы изменяете регулярное выражение, вы должны запускать .compile (). Это также относится к использованию .exec () внутри цикла, просто включите .compile () перед ним. Полезно знать.