Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение не находит все нужные символы 
:(
    Опции темы
begin
Дата 9.1.2014, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Есть функция транслитерации, которая должна заменять:
1. русские буквы на их английский аналог
2. пробел на тире
3. все остальные знаки препинания и математические - на пустой символ

Функция выглядит так:
Код

function translite(str){
var arr={'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ж':'g', 'з':'z', 'и':'i', 'й':'y', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'ы':'i', 'э':'e', 'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ж':'G', 'З':'Z', 'И':'I', 'Й':'Y', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O', 'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Ы':'I', 'Э':'E', 'ё':'yo', 'х':'h', 'ц':'ts', 'ч':'ch', 'ш':'sh', 'щ':'shch', 'ъ':'', 'ь':'', 'ю':'yu', 'я':'ya', 'Ё':'YO', 'Х':'H', 'Ц':'TS', 'Ч':'CH', 'Ш':'SH', 'Щ':'SHCH', 'Ъ':'', 'Ь':'', 'Ю':'YU', 'Я':'YA', ' ':'-', '"':'', '“':'', '”':'', '«':'', '»':'', "'":'', '.':'', ',':'', ':':'', '+':'', '№':'', '#':'', '!':'', '$':'', '%':'', '&':'', '?':'', '(':'', ')':''};
var replacer=function(a){return arr[a]||a};
return str.replace(/[А-яёЁьЬъЪ\D\s]/g,replacer);
}


Но не могу найти ошибку - не заменяются: мягкий знак, твердый знак и все знаки препинания и математические  smile 
Подскажите, как исправить регулярное выражение?

Добавлено через 4 минуты и 15 секунд
обрезалась строка в функции. вот полный вид:

Код

function translite(str){
var arr={'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ж':'g', 'з':'z', 'и':'i', 'й':'y', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'ы':'i', 'э':'e', 
'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ж':'G', 'З':'Z', 'И':'I', 'Й':'Y', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O', 'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Ы':'I', 'Э':'E', 
'ё':'yo', 'х':'h', 'ц':'ts', 'ч':'ch', 'ш':'sh', 'щ':'shch', 'ъ':'', 'ь':'', 'ю':'yu', 'я':'ya', 'Ё':'YO', 'Х':'H', 'Ц':'TS', 'Ч':'CH', 'Ш':'SH', 'Щ':'SHCH', 'Ъ':'', 'Ь':'', 'Ю':'YU', 'Я':'YA', 
' ':'-', '"':'', '“':'', '”':'', '«':'', '»':'', "'":'', '.':'', ',':'', ':':'', '+':'', '№':'', '#':'', '!':'', '$':'', '%':'', '&':'', '?':'', '(':'', ')':''};
var replacer=function(a){return arr[a]||a};
return str.replace(/[А-яёЁьЬъЪ\D\s]/g,replacer);
}

PM MAIL   Вверх
ksnk
Дата 9.1.2014, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Дык. Как работает оператор || для случая, если первый операнд - пустая строка?

Поправить можно, например, так.
Код

var replacer=function(a){return a in arr?arr[a]:a};


Это сообщение отредактировал(а) ksnk - 9.1.2014, 19:51


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
paperstreet7
Дата 9.1.2014, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.12.2009
Где: Омск

Репутация: нет
Всего: 1



Оформляйте код как код, чтобы он не выходил за рамки. И зачем изобретать велосипед, когда все давно придумано:
Код

//Если с английского на русский, то передаём вторым параметром true.
transliterate = (
    function() {
        var
            rus = "щ   ш  ч  ц  ю  я  ё  ж  ъ  ы  э  а б в г д е з и й к л м н о п р с т у ф х ь".split(/ +/g),
            eng = "shh sh ch cz yu ya yo zh `` y' e` a b v g d e z i j k l m n o p r s t u f x `".split(/ +/g)
        ;
        return function(text, engToRus) {
            var x;
            for(x = 0; x < rus.length; x++) {
                text = text.split(engToRus ? eng[x] : rus[x]).join(engToRus ? rus[x] : eng[x]);
                text = text.split(engToRus ? eng[x].toUpperCase() : rus[x].toUpperCase()).join(engToRus ? rus[x].toUpperCase() : eng[x].toUpperCase());    
            }
            return text;
        }
    }
)();
var txt = "Съешь ещё этих мягких французских булок, да выпей же чаю!";
alert(transliterate(txt));
alert(transliterate(transliterate(txt), true));


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
ksnk
Дата 9.1.2014, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



paperstreet7, Этот велосипед надо еще допилить, чтобы он выкидывал некоторые символы, как в с, исходном.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.