Показать сообщение отдельно
  #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.
Ответить с цитированием