26.03.2013, 17:16
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от rgl
|
Споткнется (не заметит закрывающую кавычку) если перед ней стоит замаскированный обратный слэш, напр.
var s = "abcd\\";
|
Добавлю проверку, пасиб за замечание.
(["'])(?:\1|.*?(?:[\\]{2}|[^\\])\1)
Последний раз редактировалось kobezzza, 26.03.2013 в 18:13.
|
|
26.03.2013, 17:40
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
kobezzza,
Сообщение от kobezzza
|
(["'])(?:\1|.*(?:[\\]{2}|[^\\])\1)
|
a='aaa';b='bbb';
Мой вариант:
(["'])(?:\\.|(?:(?!\1).)*\1)
|
|
26.03.2013, 17:52
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от rgl
|
kobezzza,
a='aaa';b='bbb';
Мой вариант:
(["'])(?:\\.|(?:(?!\1).)*\1)
|
Забыл жадность убрать, теперь не спотыкается (обновил выше). Чёт ты перемудрил по-моему
var a = '\a':
у тебя упадёт, из-за странной проверки \\.
var a= 'sdsd\'
также упадёт
Последний раз редактировалось kobezzza, 26.03.2013 в 18:11.
|
|
26.03.2013, 18:13
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Не, ну как только я начинаю проверять регэкспы, рискую нарваться :-)
a='aaa\\\'a';b='bbb';
Сообщение от kobezzza
|
Забыл жадность убрать, теперь не спотыкается (обновил выше).
|
Сообщение от kobezzza
|
(["'])(?:\1|.*?(?:[\\]{2}|[^\\])\1)
|
А я не перемудрил, а недомудрил, вот как надо:
(["'])(?:\\.|(?:(?:(?!\1).)))*\1
|
|
26.03.2013, 18:19
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Сообщение от kobezzza
|
у тебя упадёт, из-за странной проверки \\.
|
Мой первоначальный вариант не работает из-за того, что \1 который должен матчить закрывающую кавычку, находится в скобках, и не применим к первой части | , кроме того, звездочка на левую часть | не действует.
А насчет var a= 'sdsd\' так я предполагаю, что JS-ных ошибок нет, т.е. все кавычки в строке закрываются
Последний раз редактировалось rgl, 26.03.2013 в 18:31.
|
|
26.03.2013, 18:36
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
var a= '\\\'
UPD: не прочитал, что ты не учитываешь этот фактор, тада всё ок.
Последний раз редактировалось kobezzza, 26.03.2013 в 18:41.
|
|
26.03.2013, 18:50
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Сообщение от kobezzza
|
var a= '\\\'
|
Ну так твое тоже ошибается.
Раз уж устроили тут такое соревнование-блиц, нужно договориться о правилах, напр, допустимы ли непарные кавычки в строчке. Я изначально считал, что применяться регэксп будет к JavaScript коду, в котором нет ошибок (так тема начиналась), а значит кавычки должны обязательно закрываться.
|
|
26.03.2013, 18:52
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от rgl
|
Ну так твое тоже ошибается.
Раз уж устроили тут такое соревнование-блиц, нужно договориться о правилах, напр, допустимы ли непарные кавычки в строчке. Я изначально считал, что применяться регэксп будет к JavaScript коду, в котором нет ошибок (так тема начиналась), а значит кавычки должны обязательно закрываться.
|
Да ладно, какие соревнования) Мой тоже падает, думаю, как сделать чтобы не падал
|
|
26.03.2013, 18:56
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Вот при корректном JavaScript кода мой работает правильно, а твой ошибается:
var a= 'a\\\'a';
|
|
26.03.2013, 19:00
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Сообщение от kobezzza
|
думаю, как сделать чтобы не падал
|
Наверно, так:
/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')/
но тут одинарная и двойная кавычки каждая сама по себе, а тебе хочется чтобы вместе.
|
|
|
|