Внутренние вхождения, рекурсия
Имеется такой скрипт
var str = 'sometext1 <b>sometext2 <b>sometext3</b> </b> sometext1'; str = str.replace(/\<b\>([\s\S]*)\<\/b\>/gim, function(match, contents, offset, s) {return "[b]"+contents+"[/b]";} ); alert(str); Должен заменять все вхождения в строку, включая внутренние вхождения, но почему-то отказывается и дело доходит только до первого вхождения. Второй день и так и сяк, но не выходит. |
Почему останаливается на первом?
Потому что жадные скобки ([\s\S]*) забирают все символы вплоть до последнего вхождения <\/b>. Как сделать не жадными? ([\s\S]*?) Но так всё равно не работает! И не будет. Что же делать? Идти иным путём, так str.replace(/<(\/?b)>/gi, '[$1]') или как нить иначе. |
Уже думал об этом, но почему-то все ассоциировал с php
имею в виду $text = '<b>textasd</b>'; $text = preg_replace('<b>','[b]',$text); При таком раскладе с видом страницей можно сильно похулиганить. Не будет ли каких либо эффектов с js'ом? |
Имеете ввиду прохождение левых тегов? Таки их надо экранировать напрочь все.
|
Цитата:
|
На счет прохождения не левых, а не парных тегов.
Цитата:
В принципе, тему можно закрывать. Всем спасибо :) |
Часовой пояс GMT +3, время: 15:18. |