Сообщение от 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>