>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Проблемы с сайтами http://forum.mozilla-russia.org/viewforum.php?id=24 >JavaScript-RegExp и Русские символы http://forum.mozilla-russia.org/viewtopic.php?id=9017 |
Andrеw > 16-03-2006 11:56:26 |
В FF-1.5.0.1 не работает такое вот рег-выражение: RegExp("\b"+"слово", "gi"); А.М. # firefox-config --version |
Andrеw > 16-03-2006 13:57:02 |
По ходу еще и \w русские не интерпретирует. А так как (?=[^\wа-Я]) на упреждение не работает, только после подстроки, то возникают проблемы с реализацией \b. |
Al_H > 16-03-2006 14:02:06 |
Похоже, дело в том, что регулярные выражения, как часто и остальной JavaScript, работает с русским языком в кодировке Юникод (UTF-8). Попробуйте перекодировать необходимый текст, например, программой Штирлиц. |
Andrеw > 16-03-2006 18:33:33 |
какой такой штирлиц? Мне надо что бы работало вот это: var str1 = "Это тест!"; что именно вы предлагаете перекодировать?.. |
Al_H > 16-03-2006 19:53:24 |
- здесь у Вас кодировка Win1251. Попробуйте кириллицу, которая здесь присутствует, перекодировать в UTF-8. |
Andrеw > 17-03-2006 01:29:31 |
Простите, но вы ерунду городите А.М. |
Mash > 17-03-2006 08:17:06 |
Сразу замечание по RegExp: не хватает "\b", т.е. По сути: да, действительно не работает. Мне сейчас некогда голову ломать "почему?", в голове другое варится, но вот такое извращение работать должно: Выделить код Код:<script> var str1 = encodeURIComponent("Это тест!"); var str2 = encodeURIComponent("тест!"); var regexp = new RegExp("\\b"+str2, "g"); alert( decodeURIComponent(str1.replace(regexp, "xxxx")) ); </script> Сразу минус -- флаг "i" тут уже не влияет, т.к. у маленьких и больших букв будут разные символы после encode. Другой вариант именно для этого примера: но, как предполагаю, это вы и без меня знаете. А вообще... во всех справочниках, которые есть у меня под рукой по JS тот же "\w" указывается как эквивалент "[A-Za-z0-9_]", а русских символов мы здесь не наблюдаем. Вполне вероятно, что "\b" не срабатывает по этой же причине, потому как Выделить код Код:<script> var str1 = "Это Fтест тест!"; var str2 = "Fтест"; var regexp = new RegExp("\\b" + str2, "i"); alert(str1.replace(regexp, "xxxx")); </script> вполне себе работает. М.б. стоит просто написать наши символы (типа "A-Za-z0-9_\xc0-\xff\xa8\xb8" или как там...) и манипулировать этим, вместо "\w"? P.S. Мог какую глупость ляпнуть, я сейчас сотней дел одновременно занят. |
Andrеw > 17-03-2006 18:19:20 |
Mash Спасибо. С encodeURIComponent я пробовал - тоже не работает, потому что, не интерпретируется как "\w", т.е. вхождение строки находится в любом месте - для этой конструкции \b находится перед каждым символом. В итоге, задачу то я конечно решил, правда получилось как то уродливо. Всем спасибо. |
Al_H > 17-03-2006 19:06:52 |
Не за что. Просто сталкивался с проблемой в JavaScript для Greasemonkey, решилось перекодированием строки. |