Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№116-03-2006 11:56:26

Andrеw
Участник
 
Группа: Members
Откуда: Мурманск
Зарегистрирован: 15-06-2005
Сообщений: 59

JavaScript-RegExp и Русские символы

В 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)

Отсутствует

 

№216-03-2006 13:57:02

Andrеw
Участник
 
Группа: Members
Откуда: Мурманск
Зарегистрирован: 15-06-2005
Сообщений: 59

Re: JavaScript-RegExp и Русские символы

По ходу еще и \w русские не интерпретирует. А так как (?=[^\wа-Я]) на упреждение не работает, только после подстроки, то возникают проблемы с реализацией \b.

Отсутствует

 

№316-03-2006 14:02:06

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508

Re: JavaScript-RegExp и Русские символы

Похоже, дело в том, что регулярные выражения, как часто и остальной JavaScript, работает с русским языком в кодировке Юникод (UTF-8). Попробуйте перекодировать необходимый текст, например, программой Штирлиц.

Отсутствует

 

№416-03-2006 18:33:33

Andrеw
Участник
 
Группа: Members
Откуда: Мурманск
Зарегистрирован: 15-06-2005
Сообщений: 59

Re: JavaScript-RegExp и Русские символы

какой такой штирлиц? Мне надо что бы работало вот это:

var str1 = "Это тест!";
var str2 = "тест!";
var regexp = new RegExp("\b"+str2, "i");
srtr1.replace(regexp, "xxxx");

что именно вы предлагаете перекодировать?..
Похоже кто то из нас чего то недопонял.

Отсутствует

 

№516-03-2006 19:53:24

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508

Re: JavaScript-RegExp и Русские символы

Выделить код

Код:

var str1 = "Это тест!";
var str2 = "тест!";

- здесь у Вас кодировка Win1251. Попробуйте кириллицу, которая здесь присутствует, перекодировать в UTF-8.

Отсутствует

 

№617-03-2006 01:29:31

Andrеw
Участник
 
Группа: Members
Откуда: Мурманск
Зарегистрирован: 15-06-2005
Сообщений: 59

Re: JavaScript-RegExp и Русские символы

Простите, но вы ерунду городите :(

А.М.

Отсутствует

 

№717-03-2006 08:17:06

Mash
Участник
 
Группа: Extensions
Зарегистрирован: 09-04-2005
Сообщений: 620
Веб-сайт

Re: JavaScript-RegExp и Русские символы

Сразу замечание по RegExp: не хватает "\b", т.е.

Выделить код

Код:

RegExp("\\b"+"слово", "gi");

По сути: да, действительно не работает. Мне сейчас некогда голову ломать "почему?", в голове другое варится, но вот такое извращение работать должно:

Выделить код

Код:

<script>
var str1 = encodeURIComponent("Это тест!");
var str2 = encodeURIComponent("тест!");
var regexp = new RegExp("\\b"+str2, "g");
alert( decodeURIComponent(str1.replace(regexp, "xxxx")) );
</script>

Сразу минус -- флаг "i" тут уже не влияет, т.к. у маленьких и больших букв будут разные символы после encode.

Другой вариант именно для этого примера:

Выделить код

Код:

var regexp = new RegExp("\\s" + str2, "i");

но, как предполагаю, это вы и без меня знаете.

А вообще... во всех справочниках, которые есть у меня под рукой по 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)

Отсутствует

 

№817-03-2006 18:19:20

Andrеw
Участник
 
Группа: Members
Откуда: Мурманск
Зарегистрирован: 15-06-2005
Сообщений: 59

Re: JavaScript-RegExp и Русские символы

Mash Спасибо.
Т.е., если я правильно понял, это ни какая не бага, а просто такая вот реализация regexp в JS и сообщать о баге не имеет смысла?

С encodeURIComponent я пробовал - тоже не работает, потому что, не интерпретируется как "\w", т.е. вхождение строки находится в любом месте - для этой конструкции \b находится перед каждым символом.
\s - в чистом виде, не подходит, так как надо искать любое начало слова - кавычки, скобки и пр. Можно конечно перечислить все варианты с которых может начинатся слово, но тогда (?=) - это не работает на упреждение.

В итоге, задачу то я конечно решил, правда получилось как то уродливо.

Всем спасибо.
А.М.

Отсутствует

 

№917-03-2006 19:06:52

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508

Re: JavaScript-RegExp и Русские символы

Не за что. Просто сталкивался с проблемой в JavaScript для Greasemonkey, решилось перекодированием строки.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]