рони,
не заметил что вы поставили ограничители начала и конца строк рони,
<script>
var str='text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3 text1 aaaaa aa aaa aaaa aaa aaa a aaaa aaaa aaaa aaa aaa text3 text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3',
rx=/(text1|text2|text3)/g,
match = str.match(rx)||[];
document.write(match);
</script>
вот так, да все верно Спасибо |
/(text1|text2|text3)/g - совсем не то же самое, что регулярка в стартовом посте. Здесь куски находятся по отдельности, а там - именно как составная конструкция.
в стартовом посте text2 не вылавливается из-за нежадности. Первая .*? забирает пустую подстроку, потом не находится text2, далее .*? растягивается до text3, и всё. Регулярка не замотивирована найти text2 в середине. самый простой (но не факт, что универсальный) способ допилки стартового регекса:
var rx = /(text1)(?:.*?(text2))?.*?(text3)/;
function exec(str) {
var m = rx.exec(str);
if (!m) { return alert([str, '', 'not matched'].join('\n')); }
alert([str, '', m[1], m[2], m[3]].join('\n'));
}
exec('aaaa text1 aaaaa text2 aaaa text3 aaaa');
exec('aaaa text1 aaaaa aaaa text3 aaaa');
exec('aaaa text1 aaaaa text2 aaaa aaaa');
|
Alexandroppolus,
спасибо, возьму на вооружение |
Cache,
вообще говоря, моя регулярка может облажаться, если в строке несколько совпадений: 'text1 a text3 aaaa text1 a text2 a text3' здесь (?:.*?(text2)) жадничает в попытке найти text2, и проскакивает text3. Поправка: /(text1)(?:(?:(?!text3).)*?(text2))?.*?(text3)/- теперь мы проверяем точки, чтобы не проскочить. |
Цитата:
laimas иногда провозглашает удивительнейшие вещи! Диковинка! Цитата:
<script>
var
str='text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3',
rx=/(text1)(?:.*(text2).*|.*)(text3)/;
document.write(rx.exec(str).join('<br>'));
</script>
|
Цитата:
<script>
var str = "text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3 text1 aaaaa aa aaa aaaa aaa aaa a aaaa aaaa aaaa aaa aaa text3 text1 aaaaa aa aaa aaaa aaa aaa a text2 aaaa aaaa aaaa aaa aaa text3";
var result = str.split(/(text1|text2|text3)/).filter(function(v, i) { return i % 2 === 1 });
document.write(result);
</script>
|
| Часовой пояс GMT +3, время: 01:22. |