Как использовать JavaScript regex по нескольким строкам?

var ss= "
aaaa\nbbb\nccc
ddd"; var arr= ss.match( //gm ); alert(arr); // null

Я хотел бы ПРЕД блок, который будет взят, даже при том, что он охватывает по символам новой строки. Я думал, что флаг 'm' делает это. Не делает.

Найденный ответом здесь перед регистрацией. Так как я думал, что знал, JavaScript (прочитайте три книги, работал часы) и не было существующего решения в Так, я буду сметь отправлять так или иначе. камни броска здесь

Таким образом, решение:

var ss= "
aaaa\nbbb\nccc
ddd"; var arr= ss.match( //gm ); alert(arr); //
...
:)

У кого-либо есть менее загадочный путь?

Править: это - дубликат, но так как более трудно найти, чем мой, я не удаляю.

Это делает предложение [^] как "многострочная точка". То, что я все еще не понимаю, то, почему [.\n] не работает. Угадайте, что это - одна из печальных частей JavaScript..

247
задан Community 23 May 2017 в 02:02
поделиться

2 ответа

[. \ N] не работает, потому что . не имеет особого значения внутри [], это просто означает буквальное значение . . (. | \ N) - это способ указать «любой символ, включая новую строку». Если вы хотите сопоставить все символы новой строки, вам нужно будет добавить \ r , а также включить окончания строк в стиле Windows и классической Mac OS: (. | [\ R \ n]) .

Это оказывается несколько громоздким, а также медленным (подробнее см. ответ KrisWebDev ), поэтому лучшим подходом было бы сопоставление всех пробельных символов и всех непробельных символов с помощью [\ s \ S] , который будет соответствовать всему, быстрее и проще.

В общем, вам не следует пытаться использовать регулярное выражение для соответствия фактическим тегам HTML. См., Например, эти вопросы для получения дополнительной информации о том, почему.

Вместо этого попробуйте выполнить поиск нужного тега в DOM (использование jQuery упрощает эту задачу, но вы всегда можете выполнить document.getElementsByTagName ("pre") со стандартным DOM), а затем выполнить поиск текстовое содержимое этих результатов с регулярным выражением, если вам нужно сопоставить с содержимым.

219
ответ дан 23 November 2019 в 03:02
поделиться

[.\n] не работает, так как точка в [] (по определению регекса; не только javascript) означает точку-символ. Вместо этого можно использовать (.|\n) (или (.|[\n\r])).

.
11
ответ дан 23 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: