javascript и спецсимволы Вопрос

L
На сайте с 17.05.2013
Offline
88
603

Есть така функция транслита:

function ru_cyrill_to_latin(text)

{
text=text.toLowerCase();
var arrru = new Array ('Я','я','Ю','ю','Ч','ч','Ш','ш','Щ','щ','Ж','ж','А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н', 'О','о','П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ы','ы','Ь','ь','Ъ','ъ','Э','э');
var arren = new Array ('Ya','ya','Yu','yu','Ch','ch','Sh','sh','Sh','sh','Zh','zh','A','a','B','b','V','v','G','g','D','d','E','e','E','e','Z','z','I','i','J','j','K','k','L','l','M','m','N','n', 'O','o','P','p','R','r','S','s','T','t','U','u','F','f','H','h','C','c','Y','y','','','','','E', 'e');
for(var i=0; i<arrru.length; i++){
var reg = new RegExp(arrru, "g");
text = text.replace(reg, arren);
}
return text;
}

Хочу расширить функцию добавив для замены знаки припинания и спецсимволы, в массиве дописываю:

,' ',',','.','?','!'); // Пробел, запятая, точка, вопросительный, восклицательный

, '-', '', '', '', '');

Вот как выглядит эта функция:

function ru_cyrill_to_latin(text)

{
text=text.toLowerCase();
var arrru = new Array ('Я','я','Ю','ю','Ч','ч','Ш','ш','Щ','щ','Ж','ж','А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н', 'О','о','П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ы','ы','Ь','ь','Ъ','ъ','Э','э',' ',',','.','?','!');

var arren = new Array ('Ya','ya','Yu','yu','Ch','ch','Sh','sh','Sh','sh','Zh','zh','A','a','B','b','V','v','G','g','D','d','E','e','E','e','Z','z','I','i','J','j','K','k','L','l','M','m','N','n', 'O','o','P','p','R','r','S','s','T','t','U','u','F','f','H','h','C','c','Y','y','','','','','E', 'e', '-', '', '', '', '');

for(var i=0; i<arrru.length; i++){
var reg = new RegExp(arrru, "g");
text = text.replace(reg, arren);
}
return text;
}

И после этого перестает работать функция. Там что эти символы нужно экранировать?

П,С. Так где звездочки в функции отображает это должны быть [ ]

ДП
На сайте с 23.11.2009
Offline
203
#1

Да, точка и знак вопроса как минимум это спецсимволы для регулярок.

http://www.fon.hum.uva.nl/praat/manual/Regular_expressions_1__Special_characters.html - тут более полный список. Экранируются слешом, насколько помню.

И вот еще http://stackoverflow.com/questions/399078/what-special-characters-must-be-escaped-in-regular-expressions - для разных движков список разный.

siv1987
На сайте с 02.04.2009
Offline
427
#2
luckydan:
Там что эти символы нужно экранировать?

Ну так вы же используете regexp, естественно спец символы нужно экранировать.

luckydan:
var reg = new RegExp
L
На сайте с 17.05.2013
Offline
88
#3

Подскажите пожалуйста как их правильно экранировать?

Добавляю элемент в массив например так: '\.' но почему-то не срабатывает..

ДП
На сайте с 23.11.2009
Offline
203
#4

Не уверен, но попробуйте двумя слешами - "\\."

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий