Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   RegExp и unicode (https://javascript.ru/forum/misc/1218-regexp-i-unicode.html)

Yury900 11.05.2008 21:01

RegExp и unicode
 
есть у меня RegExp: re = /name='.+?_([^_']+)'/gmi;
Применяется он к такому тексту:
<table><tr><td>место работы</td><td colspan=4><input name='previous_place_new1' style='width:100%'></td></tr></table>

Текст берётся из div.innerHTML, и изначально лежит в HTML документе, в кодировке UTF-8.

В описанной ситуации RegExp ничего не находит.

Если же убрать из текста все русские буквы, то RegExp.$1 содержит, как и задумано, строку "new1".

Как бы заставить это работать с юникодом тоже?

Бровзеры, где это не работает: IE6sp1, FF2.0.0.14, Opera9.27

scuter 11.05.2008 21:22

попробуй сам javascript сохранить в той же кодировки.

Yury900 12.05.2008 12:45

Так в яваскрипте-то одни латинские буквы, он в UTF-8 ничем не отличится от win-1252. Впрочем, добавил туда комментарий по-русски, сохранил в UTF-8. Не помогло...

Yury900 12.05.2008 16:22

Странным образом юникод несовместим с апострофом. Если заменить его на [^\w], то всё работает.

Gvozd 12.05.2008 16:32

Цитата:

Сообщение от Yury900
Странным образом юникод несовместим с апострофом

:D :D :D
Вообще-то в регулярках спецсимволы экранировать надо. и кодировка тут не при чем
ЗЫ. каюсь. когда просматривал регулярку, сам не заметил этого безобразия

Gvozd 12.05.2008 16:58

Все что написано вверху неправда.(((
Но кодировка и вправду непричем
сел разбиратся подробнее, и выяснил следующее:
некоторые браузеры(тестил на лисе. возможно и на других), в HTML-коде приводят все кавычки к двойным. Поэтому твоя первая регулярка не срабатывала, а вторая срабатывает.
Я так понимаю вы принимаете эту строку из innerHTML. вот в этом и проблема.
При формировании строки в переменную, все срабатывает на ура в любой кодировке

Kolyaj 12.05.2008 22:37

Цитата:

Сообщение от Gvozd
некоторые браузеры(тестил на лисе. возможно и на других), в HTML-коде приводят все кавычки к двойным.

Угу, а еще в верхний регистр переводят названия тегов. А ИЕ у некоторых значений аттрибутов вообще кавычки убирает. Так что по-аккуратнее надо со связкой RegExp-innerHTML.

Gvozd 13.05.2008 00:19

я бы сделал так
name_item=item.getElementsByTagName('INPUT')[0].getAttribute("name")

где item -- указатель на объект, который содержит в себе строчку из примера.
а затем с name_item безболезнено делаем что хотим


Часовой пояс GMT +3, время: 19:09.