var ss= "
aaaa\nbbb\ncccddd"; var arr= ss.match( //gm ); alert(arr); // null Я хотел бы ПРЕД блок, который будет взят, даже при том, что он охватывает по символам новой строки. Я думал, что флаг 'm' делает это. Не делает.
Найденный ответом здесь перед регистрацией. Так как я думал, что знал, JavaScript (прочитайте три книги, работал часы) и не было существующего решения в Так, я буду сметь отправлять так или иначе. камни броска здесь
Таким образом, решение:
var ss= "
aaaa\nbbb\ncccddd"; var arr= ss.match( //gm ); alert(arr); //...:)У кого-либо есть менее загадочный путь?
Править: это - дубликат, но так как более трудно найти, чем мой, я не удаляю.
Это делает предложение
[^]
как "многострочная точка". То, что я все еще не понимаю, то, почему[.\n]
не работает. Угадайте, что это - одна из печальных частей JavaScript..
[. \ N]
не работает, потому что .
не имеет особого значения внутри []
, это просто означает буквальное значение .
. (. | \ N)
- это способ указать «любой символ, включая новую строку». Если вы хотите сопоставить все символы новой строки, вам нужно будет добавить \ r
, а также включить окончания строк в стиле Windows и классической Mac OS: (. | [\ R \ n])
.
Это оказывается несколько громоздким, а также медленным (подробнее см. ответ KrisWebDev ), поэтому лучшим подходом было бы сопоставление всех пробельных символов и всех непробельных символов с помощью [\ s \ S]
, который будет соответствовать всему, быстрее и проще.
В общем, вам не следует пытаться использовать регулярное выражение для соответствия фактическим тегам HTML. См., Например, эти вопросы для получения дополнительной информации о том, почему.
Вместо этого попробуйте выполнить поиск нужного тега в DOM (использование jQuery упрощает эту задачу, но вы всегда можете выполнить document.getElementsByTagName ("pre")
со стандартным DOM), а затем выполнить поиск текстовое содержимое этих результатов с регулярным выражением, если вам нужно сопоставить с содержимым.
[.\n]
не работает, так как точка в []
(по определению регекса; не только javascript) означает точку-символ. Вместо этого можно использовать (.|\n)
(или (.|[\n\r])
).