ошибка символа новой строки в регулярном выражении

Я пытаюсь заставить свое регулярное выражение работать в нескольких строках, и «m», похоже, тоже не работает. Итак, мое регулярное выражение работает для 1-й строки, а не для следующих строк.


person Watchful Protector    schedule 09.10.2012    source источник
comment
Дополнительное примечание: флаг m используется для того, чтобы символы начала строки (^) и конца строки ($) совпадали с символами в каждой строке. Без него они будут соответствовать самому началу и самому концу строки/значения.   -  person inhan    schedule 09.10.2012


Ответы (1)


Вы можете пропустить часть match и сделать все за один шаг:

> "the  *text* is to be replaced \n by *text*".replace(/\*([\s\S]*?)\*/g, '<i>$1</i>');
"the  <i>text</i> is to be replaced \n by <i>text</i>"
  • . соответствует любому символу, но не включает новые строки. [\s\S] соответствует любому символу, включая символы новой строки.

  • Я изменил ваше регулярное выражение поиска на \*([\s\S]*?)\*, что не жадно соответствует вещам между звездочками.

  • Строка замены — <i>$1</i>. $1 заменяется содержимым первой группы захвата, которая является вашим текстом.

Кроме того, поскольку похоже, что вы пытаетесь преобразовать Markdown в HTML, попробуйте использовать готовый конвертер JS: http://www.showdown.im/


Вы можете использовать его следующим образом:

var str = "the  *text* is to be *replaced \n by* *text*";

alert(str.replace(/\*([\s\S]*?)\*/g, '<i>$1</i>'));
person Blender    schedule 09.10.2012
comment
Ты имеешь в виду? var str=текст должен быть заменен \n на текст; alert(newStr.replace(/*(.*?)*/g, '‹i›$1‹/i›'); должно работать?! Не работает... :/ я совершенно новичок в регулярных выражениях. ..это вообще ни о чем не предупреждает.. - person Watchful Protector; 09.10.2012
comment
Да, это так (но измените newStr на str). Я тестирую свой JS в консоли, поэтому втисну все в одну строку. - person Blender; 09.10.2012
comment
Это работает. Однако мне сказали, что одно и то же регулярное выражение следует использовать для строки типа * a\n1 *, и оно должно делать то же самое. Но это не так. Можете ли вы дать мне некоторые данные по этому поводу, пожалуйста? Кроме того, \n должен отображаться как часть новой строки. Это не должно исчезнуть - person Watchful Protector; 09.10.2012
comment
@ user1727587: alert() — грубый инструмент отладки. Не используйте его. Возьмите Firebug для Firefox или встроенный инспектор Chrome и используйте вместо него console.log(). Что касается новой строки, см. мое редактирование. - person Blender; 09.10.2012
comment
Это работает и для * a \n 1*. Но проблема, которая все еще сохраняется, заключается в том, что \n заменяется новой строкой. Я хотел бы отобразить \n. - person Watchful Protector; 09.10.2012
comment
Вы используете alert(). Его не заменяют. - person Blender; 09.10.2012
comment
В console.log тоже не отображается. Я пробую это с обоими. Но даже в console.log он отображает часть после \n в новой строке и не отображает \n. - person Watchful Protector; 09.10.2012
comment
@user1727587: user1727587: разрыв строки — это отображаемая новая строка. Введите a\nb в консоль. - person Blender; 09.10.2012
comment
@ user1727587: разрыв строки есть, но он отображается буквально как разрыв строки. Когда вы пишете \n, это не \ + n. \n — это один символ, отображаемый как разрыв строки. - person Blender; 09.10.2012
comment
Хм, хорошо. Таким образом, это означает, что на самом деле это часть того, что отображается. Но мы этого не видим! Большой. Спасибо большое за вашу помощь. :) - person Watchful Protector; 09.10.2012
comment
@ user1727587: Да, это просто проблема с отображением. См. мой вопрос здесь: stackoverflow.com/questions /12792732/ - person Blender; 09.10.2012
comment
Я скопировал a\nb в редакторе консоли firefox. Но даже это не отображает \n, как вы говорите в своих вопросах. Как мне заставить \n отображаться хотя бы в firefox? - person Watchful Protector; 09.10.2012
comment
@ user1727587: Я набрал это в консоли и сделал снимок экрана. Не уверен, как еще помочь вам там. - person Blender; 09.10.2012