регулярные выражения
Доброе время суток!
Пожалуйста подскажите в чем может быть проблема. Есть <div contenteditable=true>, навсякий случай заменяю в нем ' ' на ' ' и убираю перенос строки. Его содержимое (например, 'bla-bla-bla hello bla-bla-bla') получаю таким способом $('div').html(), далее ищу в нем кусок текста например 'hello'. Все это выглядит так: var html=$('div').html().replace(/<\s*br[^>]*>/,'').replace(/(\ )+|([\s])+/ig,' '); var re=new RegExp(clearREChars(hello));//hello='hello bla' if(html.match(re)){myCode()}//вот тут и начинается проблема. function clearREChars(str){ var chars=new Array('\\^','\\$','\\\\','\\/','\\*','\\+','\\?','\\|','\\(','\\)','\\[', '\\]','\\{', '\\}'),replacements=new Array('\\^','\\$','\\\\','\\/','\\*','\\+','\\?','\\|','\\(','\\)','\\[', '\\]','\\{', '\\}') return RELoop(chars,replacements,str);//вернет строку с заменнеными символами } В случае если мой див будет содержать bla-bla-bla hello bla-bla-bla, а я буду в нем искать строку 'hello bla', то она найдется нормально, причем, чтоб ее найти можно сделать вообще вот так if(html.match('hello bla')) Но попробовал что бы в нем было что-то посерьезней например: `Hel<div>l</div>o <span id="esui0" class="bold">a<span id="esui1" class="underline">mig</span>o</span>) $(this).hasClass('undo') ss!$(this).hasClass('undo') !$(this).hasClass('undo')`, причем $(this).hasClass('undo') ss!$(this).hasClass('undo') !$(this).hasClass('undo') - это не яваскрип код, а тоже текст внутри дива. И во всем этом я хочу попробовать найти строку '$(this).'. Она не находится как бы я ее не пытался найти - ни так html.match('$(this).'), ни так html.match(new RegExp(clearREChars('$(this).'))), ни даже если составить вот такое регулярное выражение (если вдруг внури какая-то часть будет внутри тега): /(<[^>]*>)*[\\$](<[^>]*>)*[\(](<[^>]*>)*[t](<[^>]*>)*[h](<[^>]*>)*[i](<[^>]*>)*[s](<[^>]*>)*[\)](<[^>]*>)*[.](<[^>]*>)*/ Подскажите в чем может быть проблема. Заранее очень благодарен за ответы! P.S. последнее регулярное выражение вывел алертом. Создал его так: var selectedText = '$(this).',html = "Hel<div>l</div>o <span id=\"esui0\" class=\"bold\">a<span id=\"esui1\" class=\"underline\">mig</span>o</span>) $(this).hasClass('undo') ss!$(this).hasClass('undo') !$(this).hasClass('undo')" for(i=0;i<selectedText.length;i++)re+='['+clearREChars(selectedText[i])+']'+'(<[^>]*>)*' m=html.match(new RegExp(re));alert(re) и там почему-то [\\$], а не [\$], хотя экранируется $ так же как и все остальные символы, но вместо "(" выводит "\(". Почему выводятся [\\$] с двумя слешами? |
все, кажется вопрос решен!
|
Если что не так, извините. С RexExp знаком буквально два-три дня :)
var x = "Hel<div>l</div>o <span id=\"esui0\" class=\"bold\">a<span id=\"esui1\" class=\"underline\">mig</span>o</span>) $(this).hasClass('undo') ss!$(this).hasClass('undo') !$(this).hasClass('undo')"; var z = /\$\(this\)\./g; var f = null; while((f = z.exec(x)) != null) { alert(f.index); // позиция вхождения } |
Часовой пояс GMT +3, время: 11:38. |