Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите составить регулярку для получения "private" переменных (https://javascript.ru/forum/misc/36745-pomogite-sostavit-regulyarku-dlya-polucheniya-private-peremennykh.html)

kobezzza 26.03.2013 17:16

Цитата:

Сообщение от rgl (Сообщение 242758)
Споткнется (не заметит закрывающую кавычку) если перед ней стоит замаскированный обратный слэш, напр.
var s = "abcd\\";

Добавлю проверку, пасиб за замечание.

(["'])(?:\1|.*?(?:[\\]{2}|[^\\])\1)

rgl 26.03.2013 17:40

kobezzza,
Цитата:

Сообщение от kobezzza
(["'])(?:\1|.*(?:[\\]{2}|[^\\])\1)

a='aaa';b='bbb';
Мой вариант:
(["'])(?:\\.|(?:(?!\1).)*\1)

kobezzza 26.03.2013 17:52

Цитата:

Сообщение от rgl (Сообщение 242767)
kobezzza,

a='aaa';b='bbb';
Мой вариант:
(["'])(?:\\.|(?:(?!\1).)*\1)

Забыл жадность убрать, теперь не спотыкается (обновил выше). Чёт ты перемудрил по-моему:)

var a = '\a':
у тебя упадёт, из-за странной проверки \\.
var a= 'sdsd\'
также упадёт

rgl 26.03.2013 18:13

Не, ну как только я начинаю проверять регэкспы, рискую нарваться :-)
a='aaa\\\'a';b='bbb';

Цитата:

Сообщение от kobezzza
Забыл жадность убрать, теперь не спотыкается (обновил выше).

Цитата:

Сообщение от kobezzza
(["'])(?:\1|.*?(?:[\\]{2}|[^\\])\1)

А я не перемудрил, а недомудрил, вот как надо:
(["'])(?:\\.|(?:(?:(?!\1).)))*\1

rgl 26.03.2013 18:19

Цитата:

Сообщение от kobezzza
у тебя упадёт, из-за странной проверки \\.

Мой первоначальный вариант не работает из-за того, что \1 который должен матчить закрывающую кавычку, находится в скобках, и не применим к первой части | , кроме того, звездочка на левую часть | не действует.
А насчет var a= 'sdsd\' так я предполагаю, что JS-ных ошибок нет, т.е. все кавычки в строке закрываются

kobezzza 26.03.2013 18:36

var a= '\\\' :)

UPD:
не прочитал, что ты не учитываешь этот фактор, тада всё ок.

rgl 26.03.2013 18:50

Цитата:

Сообщение от kobezzza
var a= '\\\'

Ну так твое тоже ошибается.
Раз уж устроили тут такое соревнование-блиц, нужно договориться о правилах, напр, допустимы ли непарные кавычки в строчке. Я изначально считал, что применяться регэксп будет к JavaScript коду, в котором нет ошибок (так тема начиналась), а значит кавычки должны обязательно закрываться.

kobezzza 26.03.2013 18:52

Цитата:

Сообщение от rgl (Сообщение 242792)
Ну так твое тоже ошибается.
Раз уж устроили тут такое соревнование-блиц, нужно договориться о правилах, напр, допустимы ли непарные кавычки в строчке. Я изначально считал, что применяться регэксп будет к JavaScript коду, в котором нет ошибок (так тема начиналась), а значит кавычки должны обязательно закрываться.

Да ладно, какие соревнования) Мой тоже падает, думаю, как сделать чтобы не падал:)

rgl 26.03.2013 18:56

Вот при корректном JavaScript кода мой работает правильно, а твой ошибается:
var a= 'a\\\'a';

rgl 26.03.2013 19:00

Цитата:

Сообщение от kobezzza
думаю, как сделать чтобы не падал

Наверно, так:
/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')/

но тут одинарная и двойная кавычки каждая сама по себе, а тебе хочется чтобы вместе.


Часовой пояс GMT +3, время: 03:20.