Помощь с регуляркой
Чёто никак не могу допереть, допустим есть строка:
'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, время: 21:12. |