Вот с чем работаю я -
var str = '"abc"de"\n'; Эту строку мне нужно распарсить по следующим условиям - Цитата:
var re = /(^|\n)"([\s\S]+)"($|\n)/ Получается, что третий элемент тот, что мне и был нужен. Цитата:
Цитата:
|
/(?:^|\n)"([\s\S]+)"(?:$|\n)/
/^"([\s\S]+)"$/m но это еще не конец)) '"abc"de"\n"abc"de"';)) ну допустим /^"([\s\S]+?)"$/m но все равно не идеал)) , тебе виднее как именно нужно сделать дальше. Из за отсутствия просмотра назад может придется еще что-то кроме регулярки делать. Хотя с \n^$ в этом плане проще, чем другими символами. По крайней мере в данном случае. |
Вообще если есть уверенность что первый символ точно ковычка, то можно извратиться так:
alert('"abc"de"\r\n"abc"deвак"'.match( /[^"\r\n]+.*(?="$)/mg )) |
Aetae , объясните пожалуйста выражение [^"\r\n].
А то я на него смотрю и понимаю, как - начать с кавычки, за которой идет перенос строки, но эти знаки не включать в результат. Так? Или они говорят - вообще не обращать внимания на эти символы и выводить все, кроме них самих? Это как бы и есть мой вопрос из-за которого я тему создал. |
riva, был же ответ:
Цитата:
^ - внутри квадратных скобок - отрицание. Как-то так, если упрощённо: " - не подходит под [^"\r\n]+, пропускаем a - подходит под [^"\r\n]+, начинаем получать результат b - подходит под [^"\r\n]+, берём c - подходит под [^"\r\n]+, берём " - не подходит под [^"\r\n]+, переходим к .*(?="$), подходит под .*(?="$), берём d - подходит под .*(?="$), берём e - подходит под .*(?="$), берём " - не подходит под .*(?="$) закончили первое совпадение \r - не подходит под [^"\r\n]+, пропускаем \n - не подходит под [^"\r\n]+, пропускаем " - не подходит под [^"\r\n]+, пропускаем a - подходит под [^"\r\n]+, начинаем получать результат b - подходит под [^"\r\n]+, берём c - подходит под [^"\r\n]+, берём " - не подходит под [^"\r\n]+, переходим к .*(?="$), подходит под .*(?="$), берём d - подходит под .*(?="$), берём e - подходит под .*(?="$), берём в - подходит под .*(?="$), берём а - подходит под .*(?="$), берём к - подходит под .*(?="$), берём " - не подходит под .*(?="$) закончили второе совпадение |
Цитата:
Цитата:
|
Ну нету в js regexp'ах просмотра назад, увы.
Так что придётся вам иметь дело с массивами:): alert('"abc"de"\n'.match( /^"(.*)"$/m )) |
Я пытаюсь комменты распарсить, но пока увы, безуспешно.
/** * Test-1 * Test-2 */ Вот так выглядит строка, если в файле только один коммент начатый с начала документа. '/**\n * Test-1\n * Test-2\n */' Пока остановился на ограничении количества звездочек, но ограничение в фигурных скобках у меня почему-то не работают.. |
alert( '/**\n * Test-1\n * Test-2\n */'.replace(/^\/\*\*\s+\*\s+/,'').replace(/\s*\*\/$/,'').split(/[\r\n]+\s\*\s/) ) |
Aetae, Спасибо! Но на Ваш пример, я пока только бегло глазами пробежал и всячески стараюсь от него убирать глаза. Я в js никогда не делал регуляки и мне хочется самому до этого дойти и во все разобраться, конечно с Вашей помощью.
У меня вот какой вопрос - как мне уже подсказали в это теме, если нужно из строки 'abcde' выбрать только символы 'cde', то нужно сделать так - /ab(cde)/ И тогда элемент под индексом один будет той строкой, которую и хотели получить. Но стоит включить флаг g, как все перестает работать. Как сделать, чтобы из строки выбрались только 'cde'? Желателньно какой-то универсальный вариант, так-как у меyz очень сложный пример. var str = 'abcde abcde'; var re = /ab(cde)/g; |
Часовой пояс GMT +3, время: 19:37. |