2013-05-30 3 views
-2

У меня возникли трудности с выполнением того, чего я хочу достичь, это может быть просто лишение сна, но более вероятно, что регулярное выражение не является моим сильным костюмом, я просто не могу его обнимать, но, надеюсь, кто-то может дать мне руку здесь.Строка форматирования JavaScript Regex

У меня есть следующая строка:

<span class="comment"><!--Some string\nsome other string\nsome more string--></span> 

Мне нужно отформатировать его так, что он выглядит следующим образом:

<span class="comment"><!--Some string</span>\n<span class="comment">some other string</span>\n<span class="comment">some more string--></span> 

Теперь это было бы очень легко, если это была единственная строка, как я мог бы сделать что-то вроде этого:

/</span>\n<span class="comment">/gi 

Однако форматирование должно происходить только в том случае, ding open </span> имеет класс «комментарий», другая проблема заключается в том, что открытый тег span с комментарием класса не обязательно является первым словом строки, может быть строка перед ним, и может быть бесконечно много \ n в пределах диапазона ... например другой вариант может выглядеть следующим образом:

&lt;<span class="tag">string1\nstring2</span>&gt;<span class="comment"><!--string\nanother random string--></span> 

Нет форматирование не должно происходить в пределах диапазона с классом тега, однако форматирование должно происходить в промежутке с классом комментария.

Это довольно сложно для меня, чтобы получить мою голову вокруг, ближайший я получил следующий:

регулярное выражение:

/<span class="comment">([^\<\/]*)\n/gi 

замена:

<span class="comment">$1</span>\n<span class="comment"> 

Это приближается , поскольку он форматирует последнюю строку и первую строку внутри диапазона с комментарием класса, но не строки между ними.

Для этого могут быть разработаны javascript-решения, но если это вообще возможно, я бы предпочел использовать регулярное выражение.

+1

Вы просто пытаетесь заменить '\ n' на' '? Для этого вам не нужно регулярное выражение. – Mathletics

+2

@Mathletics, похоже, он хочет ' \ n ', но кроме этой детали вы, кажется, правы! – jmeas

+0

@sircodesalot Я не думаю, что это применимо; это фактически суббинг-теги INTO в строке, а не для разбора HTML. – Mathletics

ответ

0

Здесь вы идете,

str.replace (/<span\s+class="comment">.*<\/span>/ig, function (m) { 
    return m.replace (/\n/g, '</span>\n<span class="comment">'); 
    }); 

Extract промежуток и его содержимое, а затем заменить все \n в этой части.

+0

Спасибо, мне удалось заставить ваше решение работать в рамках моего проекта и поблагодарить вас за то, что вы нашли время, чтобы помочь, учитывая, что этот вопрос было довольно сложно объяснить! –

+0

Рад помочь. – HBP

Смежные вопросы