Регулярные выражения в JavaScript
var new_string = my_string.match(/str1(.*)str1/));
в new_string[1] получаем "текст 1 текст 2", а вот, если:
текст 2 str2";
var new_string = my_string.match(/str1(.*)str1/));
new_string = NULL :( Пробовал с модификатором "m" - тоже самое :confused:
В общем мне нужно на выходе получить текст:
"текст 1
текст 2"
И где паттерн?...
И вообще, у вас код - бред сивой кобылы...
Во-первых, Javascript, насколько я знаю, не позволяет использовать многострочный код при задаче значений типа
[HTML]var my_string= "str1 текст 1
текст 2 str2";[/HTML]
Можно только
var my_string= "str1 текст 1 \r\n текст 2 str2";
Или
var my_string= "str1 текст 1 "+
+"текст 2 str2";
Во-вторых, у вас криво задано регулярное выражение.
В-третьих, var new_string = my_string.match(/str1(.*)str1/)); - лично у меня здесь не сошлось количество открытых\закрытых скобок...
Вы вообще пробовали гуглить? "Регулярные выражения Javascript" - этого запроса достаточно, первую страницу ссылок прочитать, изучить и потом писать сюда, если непонятно.
И где паттерн?...
И вообще, у вас код - бред сивой кобылы...
Во-первых, Javascript, насколько я знаю, не позволяет использовать многострочный код при задаче значений типа
[HTML]var my_string= "str1 текст 1
текст 2 str2";[/HTML]
Можно только
var my_string= "str1 текст 1 \r\n текст 2 str2";
Или
var my_string= "str1 текст 1 "+
+"текст 2 str2";
Во-вторых, у вас криво задано регулярное выражение.
В-третьих, var new_string = my_string.match(/str1(.*)str1/)); - лично у меня здесь не сошлось количество открытых\закрытых скобок...
Вы вообще пробовали гуглить? "Регулярные выражения Javascript" - этого запроса достаточно, первую страницу ссылок прочитать, изучить и потом писать сюда, если непонятно.
Во-первых: текст грабится с другого html и символы новой строки там есть (текст дал для примера).
Во-вторых, лично Вам нужно понимать, что написано от руки и опечатка вполне возможна, я же не листинг с миллионом строк преподал для разбора.
В-третьих: наверное, если гугл помог, я бы сюда не писал.
В-четвёртых, лично для Вас, если видите оплошность, напишите верный вариант, если не знаете, не нужно флудить (это Вы, я вижу, умеете).
Да, наверное я был слишком категоричен и резок с тобой.
Начнем сначала:
1. Скажи, ты пробовал найти правильный пример регулярного выражения на JS и разобраться с многострочностью?... Т.е. не бери HTML с другого сайта, а попытайся самостоятельно реализовать элементарную регулярку.
Ты делал это? Всё получалось?
Теперь по теме. Если убрать опечтаку со скобкой, то код работает абсолютно правильно. ваша строка не соответсвует регулярке.
var new_string = my_string.match(/str1(.*)str1/)
А многострочность - модификатор m
Да, наверное я был слишком категоричен и резок с тобой.
Начнем сначала:
1. Скажи, ты пробовал найти правильный пример регулярного выражения на JS и разобраться с многострочностью?... Т.е. не бери HTML с другого сайта, а попытайся самостоятельно реализовать элементарную регулярку.
Ты делал это? Всё получалось?
В том-то и дело, что весь гугл (и не только) облазил, но нормального примера с многострочным разбором не нашел, и просто разбирать текст с символами абзацев и конца строки пробовал... :(
Можно сделать так:
{
var reg_str = new RegExp(/ключ1([^]*)ключ2/g);
var match;
var arr = new Array();
while (match = reg_str.exec(str))
{
arr.push(match[0]);
}
return arr;
}
Но хотелось бы услышать, может есть более простые варианты...
Позволяет. Надо в конце строки ставить \
И вообще - много что-то исполняете тут на публику, можно и вежливей. Задача, между прочим, не тривиальная - я сам решения сразу не нашёл.
Модификатор s JavaScript почему-то не поддерживает, подерживает только g,i,m ни один из которых толком ничего не даёт. Решение - замена \r\n на [\s\S]
Т.е. регулярка будет: /str1(.*?)[\s\S]*?str2/
Автору - код надо писать сразу без ошибок. То, что это "опечатка" рукописная - кто знает. Есть просто опечатки мелкие, но общий смысл понятен. А когда приводят мелкий код и лепят в нем столько очевидных ошибок - это уж не совсем хорошо.
И вообще - много что-то исполняете тут на публику, можно и вежливей. Задача, между прочим, не тривиальная - я сам решения сразу не нашёл.
За бэкслэш - спс.
По поводу "Исполнения на публику" - пока котёнка носом в его же дерьмо не ткешь - не дойдет.
По поводу решения - нашел быстро...
Копируйте код, проверяйте...
[HTML]<html>
<head> <title></title>
</head>
<body>
<script type="text/javascript">
function reg() {
document.getElementById("pole").innerHTML="";
var str=document.getElementById("text").value;
var look=document.getElementById("look").value;
var pattern = new RegExp(look,"igm");
res = str.match(pattern, str);
if(res) {
for(i=0; i<res.length; i++) {
document.getElementById("pole").innerHTML+=res+"<br/>";
}
alert(res.length);
}
}
</script>
Что ищем?<br/>
<textarea id="look">p1 ([\s\S]*) p2</textarea><br/>
Где ищем?<br/>
<textarea id="text">Ненада нИнада
p1 Текст тест ламер
ПроГрАмМер Тест нафиг ЛамЕр p2 Программер</textarea><br/>
<a href="java script:reg();">Искать</a>
<div id="pole"></div>
</body>
</html>[/HTML]
Где p1, p2 - маркеры, между которыми находится искомый текст...
В Текстареа содержимое, как я вижу, мультистрочное. p1(.8)p2 и p1([\s\S]*)p2 дают разные результаты...
Если * получается слишком жадной, можно заменить на ? и получим p1 ([\s\S]+?) p2
Протестил - отлично работает.
З.Ы. UAS, ты меня в своё время грамотно просвятил по регуляркам...
И вообще - много что-то исполняете тут на публику, можно и вежливей. Задача, между прочим, не тривиальная - я сам решения сразу не нашёл.
Модификатор s JavaScript почему-то не поддерживает, подерживает только g,i,m ни один из которых толком ничего не даёт. Решение - замена \r\n на [\s\S]
Т.е. регулярка будет: /str1(.*?)[\s\S]*?str2/
Автору - код надо писать сразу без ошибок. То, что это "опечатка" рукописная - кто знает. Есть просто опечатки мелкие, но общий смысл понятен. А когда приводят мелкий код и лепят в нем столько очевидных ошибок - это уж не совсем хорошо.
Огромное спасибо, именно то, что нужно!!!
На будущее - используйте RegexCoach - для проверки регулярок пока что ничего лучше не встречал.
На будущее - используйте RegexCoach - для проверки регулярок пока что ничего лучше не встречал.
Кстати, http://www.pcre.ru/eval/ удобнее + онлайн + не нужно ничего ставить.
Качал я этот RegexCoach - нифига в нем не понял...
З.Ы. ответ+код на пред. странице.
На будущее - используйте RegexCoach - для проверки регулярок пока что ничего лучше не встречал.
Да, действительно, полезное и главное простое в понимании приложение, в самый раз для помощи в изучении регулярок.
Ну, чья ж это проблема, что в таком замечательном приложении не смогли разобраться?)) Тем более RegexCoach помощнее будет значительно. Тем более регулярки я использую, обычно, как минимум, в 4 разных языках, так что вариант для "только для JS" меня однозначно не устраивает