Криво обрабатывается простая регулярка в JavaScript
Вот простой пример:
text='<span class="bold js-clone-url-permission">Read+Write</span> access'; searchPattern="(.*)"; replacePattern="До $1 После"; result=text.replace(new RegExp(searchPattern,'g'), replacePattern); alert( result ); Результат: Код:
До <span class="bold js-clone-url-permission">Read+Write</span> access ПослеДо После Проверено на Firefox 14, Opera 12. |
Потому что регулярка /(.*)/ ловит пустую строку после того, как словила всю исходную строку, и lastIndex передвинулся в конец.
|
О, это классно придумано.
|
Цитата:
|
xintrea,
Приведите Примеры: для пары Вариантов входных строк и преобразованных строк на выходе, *это проще чем объяснять долго и нудно |
Цитата:
Лучше объясните, где в регулярке /(.*)/ вторая выборка? |
Цитата:
Например, если использовать регулярку на пустой строке alert(JSON.stringify("".match(/(.*)/g))); то получается 1 выборка - пустая строка. В вашем случае получается 2 выборки - вся исходная строка и пустая подстрока с индекса, равному длине исходной строки. alert(JSON.stringify('<span class="bold js-clone-url-permission">Read+Write</span> access'.match(/(.*)/g))); |
Цитата:
|
Потому что * по умолчанию жаден, т.е берёт от жизни всё.
Иначе и такой вариант возможен: text='<span class="bold js-clone-url-permission">Read+Write</span> access'; replacePattern="До $1 После"; result=text.replace(/(.*?)/g, replacePattern); alert( result ); |
Часовой пояс GMT +3, время: 05:56. |