Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   RegExp и search. Проблема с переменной в выражении (https://javascript.ru/forum/misc/9510-regexp-i-search-problema-s-peremennojj-v-vyrazhenii.html)

Arconas 21.05.2010 14:44

RegExp и search. Проблема с переменной в выражении
 
Здравствуйте.
Столкнулся с не совсем понятной мне вещью. Имеется регулярное выражение вида: /1 + id_user + [0-9]/. Отвечает это регулярное выражение за тривиальную задачу - в зависимости от пришедшего числа пользователь наблюдает в чат-приложении сообщение "Входящее приватное сообщение". Выкладываю часть кода, относящегося именно к проблеме. Значения channel и id_user приходят из XML. JS парсит ответ сервера и выводит пользователю на экран.

/*...*/
var channel = channelArray.item(i).firstChild.data.toString();
var id_user = nameArray.item(i).getAttribute("id_user");
var UserToArrow = new RegExp('1' + id_user + '[0-9]');
  if(channel.search(UserToArrow) > -1 ){
           htmlMessage += "[входящий приват] ";
           displayMessage (htmlMessage);
        }
/*...*/


Если поставить var id_user = '1', к примеру, то шаблон работает замечательно. Если же значение переменной приходит через nameArray.item(i).getAttribute("id_user"); то не работает. Ставил alert и на id_user и на UserToArrow. Шаблон формируется правильно, id_user - это номер текущего клиента. Firebug не ругается. Никак не могу понять в чем проблема и решил спросить у знающих людей.

Skipp 21.05.2010 14:50

потому что это string а вам надо, как я понял число.
используйте parseInt()

Arconas 21.05.2010 15:45

Цитата:

Сообщение от Skipp (Сообщение 56011)
потому что это string а вам надо, как я понял число.
используйте parseInt()

Скорее всего я не совсем правильно вас понял, но приведение id_user к числу результата не даёт, а если привести channel, то firebug ругается channel.search(UserToArrow) is not a function.

К тому же у меня и channel и id_user это string. То есть мне надо сформировать строку, которая будет регулярным выражением и по нему проверить channel. Числа мне по сути вообще не нужны, так как в будущем будут для идентификатора пользователя использоваться по особому сгенерированная строка.

UPD: сейчас проверил форматы:
var id_user = nameArray.item(i).getAttribute("id_user");
        var t = '1';
        var UserToArrow = new RegExp('1' + t + '2');
        alert(typeof(id_user));
        alert(typeof(t));

id_user is string.
t is string.
Но если поставить вместо t id_user, то шаблон не работает, хотя формат одинаковый. Я ничего уже не понимаю.


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