Криво обрабатывается простая регулярка в 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, время: 00:17. |