Множественная замена при помощи регулярных выражений (Regexp)
Понадобилось тут, вот выкладываю свое решение)
Исходные данные: Строка с датой вида "13 Aug"
Задача: каждый раз при появлении такой строки заменять английское название месяца на русское типа "13 авг"
Одно из возможных решений:
var str='янвJan февFeb марMar апрApr майMay июнJun июлJul авгAug сенSep октOct нояNov декDec';
p=p.replace(/[a-zA-Z]+/,str.match('[а-яА-Я]+(?='+p.match(/[a-zA-Z]+/)+')'));
Не знаю на сколько это будет быстрее проверок с if-ами, учитывая в этом случае нужно будет 3-4 ифа в среднем
Если нужна расшифровка:
в переменной p строкой "13 Aug" мы заменяем все английские буквы (которые находит регулярное выражение [a-zA-Z]+)
на то, что найдет в строке str регулярное выражение [а-яА-Я]+(?=мес), которое из строки выбирает все русские буквы, если перед ними стоит английское название месяца,
которое мы опять выбираем из переменной p
Можно несколько оптимизировать код:
var str='янвJan февFeb марMar апрApr майMay июнJun июлJul авгAug сенSep октOct нояNov декDec';
mnth=p[0].match(/[a-zA-Z]+/);
p=p.replace(mnth,str.match('[а-яА-Я]+(?='+mnth+')'));
|
Три прохода регулярки - это гораздо больше if-ов, чем ты думаешь, %username%!
К тому же, как твоя регулярка отреагирует на строку "Augustene"?
ну, теперь два)
действительно, забыл про то что на самом деле все - массивы
На самом деле далеко не всё массивы. А только массивы это массивы.
А все объекты это не массивы?
На самом деле, для решения поставленной задачи достаточно одного регулярного выражения:
Имхо, вариант с картой (как у ixth) оптимальнее.
Сам делал подобное для перевода строки в html и обратно
Все необходимые объекты созданы заранее, чтоб потом не создавались каждый раз.
ps: варианты с innerText/textContent/doc.createTextNode не сохраняют переводы строки и в нек. случаях несколько пробелов.
Roksa milf
Roksa pl domina
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.