Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 26.03.2013, 19:04
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Кажется, добил таки:
(["'])(?:\\.|(?:(?:(?!\1|\\).)))*\1

Уф-ф-ф, хорошо поразминался, а то уже подзабывать начал :-)
Ответить с цитированием
  #32 (permalink)  
Старый 26.03.2013, 19:35
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Убрал лишние скобки:
(["'])(?:\\.|(?:(?!\1|\\).))*\1
Ответить с цитированием
  #33 (permalink)  
Старый 26.03.2013, 20:12
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от rgl Посмотреть сообщение
Убрал лишние скобки:
(["'])(?:\\.|(?:(?!\1|\\).))*\1
Респект

Цитата:
Уф-ф-ф, хорошо поразминался, а то уже подзабывать начал :-)
+1
__________________
kobezzza
code monkey
Ответить с цитированием
  #34 (permalink)  
Старый 26.03.2013, 21:39
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от rgl
Убрал лишние скобки:
(["'])(?:\\.|(??!\1|\\).))*\1
не корректная у вас рега сударь, на моих примерах валится:

вот я вырезал регу со своего скрипта: https://github.com/devote/QSA/blob/master/qsa.js
var re = /(?:(['"])\1|(['"])(?:\\\\|[\s\S])*?(?:\\\\(?=\2)|[^\\])\2)/g;

var testText = 'привет "МИР"! тут я поставлю кавычку " а можно и слеши \\ или кавычка со слешами \\\" или кавычки " " или много слешей и ковычка \\\\\\\\\\\\\\\\" и" т.\\\\\\\\\\\\\\\\\\"д"......';

alert(testText.match(re).join("\n")); // выведет четыре подстроки

// ищем в коде все строки:
var code = "// for Internet Explorer VisualBasic Script accessors\
if (type !== 3) {\
    // create getter in VB Class\
    staticClassParts.push(\
        'Public ' + (type === 4 ? 'Default ' : '' ) + 'Property Get [' + subName + ']',\
        'Call VBCorrectVal(' + ( value && ( type !== 1 || value.get) ?\
            '[(accessors)].[' + prop + ']' + (type === 1 ? '.get' : '') +\
                '.call(me,[(accessors)].[' + prop + '])' : 'window.undefined' ) +\
            ',[' + subName + '])', 'End Property'\
    );\
}\
if (type !== 2) {\
    // create setter in VB Class\
    staticClassParts.push(\
        'Public Property Let [' + subName + '](val)',\
        type = (type === 4 ? 'Set [(accessors)].[' + prop + ']=val' :\
            value && (type !== 1 || value.set) ?\
                'Call [(accessors)].[' + prop + ']' + (type === 1 ? '.set' : '') +\
                    '.call(me,val,[(accessors)].[' + prop + '])' : '') +\
            '\nEnd Property', 'Public Property Set [' + subName + '](val)', type\
    );\
}";

alert(code.match(re).join("\n")); // выведет все найденные строки

Пользовательский тест:
var re = /(?:(['"])\1|(['"])(?:\\\\|[\s\S])*?(?:\\\\(?=\2)|[^\\])\2)/g;
var str = prompt('Введите строку') || '';
var res = str.match(re);
alert("Найдено: " + (res&&res.length||0) + " вхождени(е/й/я)\n--------------------------\n" + (res||[]).join("\n"));


Если нужно парсить код, то для начала, нужно удалить из кода все комменты, а потом искать строки.. Ну и про регулярки не забывать, в них тоже кавычки могут встретится:
<textarea id="area" style="width: 860px; height: 130px;" placeholder="вставь сюда JavaScript код и нажми кнопку process"></textarea>
<button onclick="process()">process</button>
<script>
    function process() {
        var rRemoveCommentsAndRexExp = /((['"])\2|(['"])(?:\\\\|[\s\S])*?(?:\\\\(?=\3)|[^\\])\3)|\/\*[\S\s]*?\*\/|\/[^\/](?:\\\\|[\s\S])*?(?:\\\\(?=\/)|[^\\])\/|\/\/[^\n]*/g;
        var rSearchStrings = /(?:(['"])\1|(['"])(?:\\\\|[\s\S])*?(?:\\\\(?=\2)|[^\\])\2)/g;
        var value = document.getElementById('area').value;
        var str = value.replace(rRemoveCommentsAndRexExp, '$1');
        var res = str.match(rSearchStrings);
        alert("Найдено: " + (res&&res.length||0) + " вхождени(е/й/я)\n--------------------------\n" + (res||[]).join("\n"));
    }
</script>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 27.03.2013 в 02:40.
Ответить с цитированием
  #35 (permalink)  
Старый 26.03.2013, 21:50
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

поправил выше код, со слешами не правильно работала рега. Терь гуд
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 27.03.2013 в 00:04.
Ответить с цитированием
  #36 (permalink)  
Старый 27.03.2013, 10:23
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от devote
не корректная у вас рега сударь, на моих примерах валится:
Что конкретно не так? Пример строки, и что по вашему мнению нужно найти. В вашем примере находит 4 подстроки, как и надо, т.е. все работает правильно.
Ответить с цитированием
  #37 (permalink)  
Старый 27.03.2013, 10:26
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от rgl
Что конкретно не так?
вы проверьте сами
Сообщение от rgl
В вашем примере находит 4 подстроки, как и надо, т.е. все работает правильно.
ну дык я бы и не выкладывал бы свой пример, если бы он не работал
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #38 (permalink)  
Старый 27.03.2013, 10:40
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Что не так??
var testText = 'привет "МИР"! тут я поставлю кавычку " а можно и слеши \\ или кавычка со слешами \\\" или кавычки " " или много слешей и ковычка \\\\\\\\\\\\\\\\" и" т.\\\\\\\\\\\\\\\\\\"д"......';
var re = /(["'])(?:\\.|(?:(?!\1|\\).))*\1/g;
alert( testText.match(re).join("\n") );
Ответить с цитированием
  #39 (permalink)  
Старый 27.03.2013, 11:02
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от rgl
Что не так??
var str = 'привет "МИР"! тут я поставлю кавычку " а можно и\n слеши \\ или кавычка со слешами \\" или кавычки " " или много\n слешей и ковычка \\\\\\\\\\\\\\\\" и" т.\\\\\\\\\\\\\\\\\\"д"......';

var re = /(["'])(?:\\.|(?:(?!\1|\\).))*\1/g;
var res = str.match(re);
alert("Найдено: " + (res&&res.length||0) + " вхождени(е/й/я)\n--------------------------\n" + (res||[]).join("\n"));


// ----------
var re = /(?:(['"])\1|(['"])(?:\\\\|[\s\S])*?(?:\\\\(?=\2)|[^\\])\2)/g;
var res = str.match(re);
alert("Найдено: " + (res&&res.length||0) + " вхождени(е/й/я)\n--------------------------\n" + (res||[]).join("\n"));
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #40 (permalink)  
Старый 27.03.2013, 11:04
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

А вот ваша рега как раз ошибается, находит там, где находить не должна (ошибочно замаскированную кавычку принимает за закрывающую):
var testText = "a'b\\\\\\'c"
var re = /(?:(['"])\1|(['"])(?:\\\\|[\s\S])*?(?:\\\\(?=\2)|[^\\])\2)/g;
alert( testText.match(re).join("\n") );
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пжлста, найти (или написать) скрипт для смены картинок. Artweb Работа 9 25.02.2011 11:28
dragSelector для iframe помогите написать Golizart ExtJS 0 25.07.2010 15:35
Помогите написать скрипт для корзины Deep Элементы интерфейса 1 19.06.2010 14:46
Помогите со скриптом для onClick! Alex13 Общие вопросы Javascript 1 04.11.2009 10:36