Страницы: 1
В FF-1.5.0.1 не работает такое вот рег-выражение: RegExp("\b"+"слово", "gi");
Вернее, работает, но только с латинскими символами.
Это так и должно быть, и в этом есть тайный смысл, или это баг?
А.М.
# firefox-config --version
1.5.0.1
# uname -v
FreeBSD 6.1-PRERELEASE #0: Sat Feb 18 21:36:44 MSK 2006
Отредактировано Andrеw (16-03-2006 13:39:26)
Отсутствует
По ходу еще и \w русские не интерпретирует. А так как (?=[^\wа-Я]) на упреждение не работает, только после подстроки, то возникают проблемы с реализацией \b.
Отсутствует
Похоже, дело в том, что регулярные выражения, как часто и остальной JavaScript, работает с русским языком в кодировке Юникод (UTF-8). Попробуйте перекодировать необходимый текст, например, программой Штирлиц.
Отсутствует
какой такой штирлиц? Мне надо что бы работало вот это:
var str1 = "Это тест!";
var str2 = "тест!";
var regexp = new RegExp("\b"+str2, "i");
srtr1.replace(regexp, "xxxx");
что именно вы предлагаете перекодировать?..
Похоже кто то из нас чего то недопонял.
Отсутствует
- здесь у Вас кодировка Win1251. Попробуйте кириллицу, которая здесь присутствует, перекодировать в UTF-8.
Отсутствует
Сразу замечание по 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. Мог какую глупость ляпнуть, я сейчас сотней дел одновременно занят.
Отредактировано Mash (17-03-2006 08:25:38)
Отсутствует
Mash Спасибо.
Т.е., если я правильно понял, это ни какая не бага, а просто такая вот реализация regexp в JS и сообщать о баге не имеет смысла?
С encodeURIComponent я пробовал - тоже не работает, потому что, не интерпретируется как "\w", т.е. вхождение строки находится в любом месте - для этой конструкции \b находится перед каждым символом.
\s - в чистом виде, не подходит, так как надо искать любое начало слова - кавычки, скобки и пр. Можно конечно перечислить все варианты с которых может начинатся слово, но тогда (? - это не работает на упреждение.
В итоге, задачу то я конечно решил, правда получилось как то уродливо.
Всем спасибо.
А.М.
Отсутствует
Страницы: 1