Помощь с регуляркой
Чёто никак не могу допереть, допустим есть строка:
'return el == "bla-bla-bla this \"foo"' И мне нужно понять, используется ли this в строке (считается, что если this указан внутри кавычек, то это строка). Как делаю сейчас: в цикле бегу по символьно по строке, если внутри строки объявляется "подстрока", то все нужные для меня символы внутри неё заменяю на временные константы, а ля __ESCAPE_THIS__, а уже после этого делаю нужные мне действия и после проделанной работы заменяю константы на их истинные значения. Мне не очень нравится такой подход, хочется написать регурялку, но никак не могу допереть, уже неск дней голову ломаю, а казалось такая ерунда. Сухой остаток: нужно написать регулярку, которая в строке 'return el == "bla-bla-bla this \"foo"'определит присутствие (или отсутствие) слова this, с условием, что если слово взято в кавычки, то оно не подходит. Заранее благодарен:) |
Обратное - наличие this в кавычках
alert('return el == " this "' .split(/(["']\s*this\s*["'])/)[1]) |
Цитата:
|
kobezzza,
Смотришь наличие this, если да - отправляешь строку на проверку тhis в кавычках if('return el ==this'.split(/(this)/)[1]=='this') {alert('return el == this' .split(/(["']\s*this\s*["'])/)[1])} if('return el =="this"'.split(/(this)/)[1]=='this') {alert('return el == "this"' .split(/(["']\s*this\s*["'])/)[1])} |
Цитата:
Уточню вопрос: как решить задачу лишь одними регулярками (одной или несколькими). Сама задача у меня уже давно решена, но меня интересует именно решение регулярками. ЗЫ: твоя регулярка не учитывает кучу параметров, таких как синхронизация кавычек, обработка экранированных кавычек, учитывание, что this может являться частью другого слова, и что в строке может быть любой набор символов, пример из первого поста: 'return el == "bla-bla-bla this \"foo"' |
alert('return el == " this "' .replace(/((?:["']\s*)?this(?:["']\s*)?)/i,'$1') == 'this') alert('return el == this ' .replace(/((?:["']\s*)(?=this(?:["']\s*)?))/i,'$1') == 'this') |
Цитата:
alert('return el == "bla-bla-bla this \"foo" && this' .replace(/((?:["']\s*)?this(?:["']\s*)?)/i,'$1') == 'this')=> false, а должно быть true |
var str='return el == " this "' function TstThis(str){ var a=str.replace(/^.*?((?:["']\s*)?this(?:["']\s*)?)/i,'$1').replace(/\s/ig,''); return!(a.indexOf("'this'")!=-1||a.indexOf('"this"')!=-1) } var str='return el == " this "' alert(TstThis(str)) var str='return el == this' alert(TstThis(str)) var str='return el == "bla-bla-bla this \"foo" && this' alert(TstThis(str)) |
Опять мимо :)
function TstThis(str){ var a=str.replace(/^.*?((?:["']\s*)?this(?:["']\s*)?)/i,'$1') var b=a.replace(/\s/ig,''); return!(b.indexOf("'this'")!=-1||b.indexOf('"this"')!=-1) } var str='return el == "bla-bla-bla this \"foo"' alert(TstThis(str)) => true, а должно быть false, т.к. this указан в кавычках, а реального this нет. ЗЫ: ты рассматриваешь самый элементарный случай, когда кроме this в кавычках ничего нет. В кавычках может быть любой набор символов, т.к. это простая строка. |
kobezzza,
:( Мучаешь - я тут от дел лыню,... Идея реализуемо, но имхо длинотельна Вместо пробелов дважды проверять на некавчки ["][^"]*?this[^"]*?["] [\'][^\']*?this[^\']*?[\'] |
Часовой пояс GMT +3, время: 09:30. |