Оптимизация кода regEx
Привет!
Прошу помочь оптимизировать код. Задание: есть словосочетание, состоящее из 2-х слов, переданное аргументом в функцию. Нужно поменять первые буквы в словах этого словосочетания местами. Например, ввели "New York", должны получить "Yew Nork", "In Utero" -> "Un Itero" и т.д. Словосочетание всегда из 2-х слов. Написал вот такую функцию:
function exchange( input ) {
var f = input.charAt(0),//первая буква первого слова в словосочетании
str = input.substr( input.indexOf(" ") + 1 ),//второе слово в словосочетании
s = str.charAt(0);//первая буква второго слова в словосочетании
var e = f,//вводим резервную переменную для сохранения значения первой буквы
f = s, //поменяли буквы местами
s = e; //поменяли буквы местами
var pre1 = input.replace( input.charAt(0), f ),//заменили первую букву первого слова в словосочетании
res2 = str.replace( str.charAt(0), s );//заменили первую букву второго слова
var res1 = pre1.substring(0, pre1.indexOf(" "));//"обрезали" второе слово в исходном словосочетании
var result = res1 + " " + res2;//соединили изменённые слова в новое словосочетание = получили ответ
}
exchange("Dave Grohl")
//result = Gave Drohl
Но есть подозрение, что такая задача решается намного компактнее. Кому не сложно, напишите, пожалуйста, компактный пример решения, используя regEx. |
Кому интересно, есть такой вариант, но хотелось бы именно при помощи regEx.
function exchange (input) { arr = input.split(" ") return arr[1].slice(0,1) + arr[0].slice(1) + " " + arr[0].slice(0,1) + arr[1].slice(1) } |
function exchange(input) {
input.replace(/(\b\w)(\w+\b)\s(\b\w)(\w+\b)/g, function (str,p1,p2,p3,p4) {
alert(p3+p2+' '+p1+p4);
})
}
exchange('Dave Grohl');
|
destus,
прокомментируйте, пожалуйста, свой код input.replace(/ (\b\w)(\w+\b)\s(\b\w)(\w+\b) /g (\b\w)(\w+\b)\s - \s - это пробел (\b\w) - это словесный символ в начале или конце строки? (\w+\b) - ? |
Alexander Belov,
function exchange(input) {
alert(input.replace(/(\b\w)(\w*)\s(\b\w)(\w*)/,'$3$2 $1$4'))
}
exchange('Dave Grohl');
ищем первый символ (\b\w), все символы до пробела после него (\w*) и заменяем. |
| Часовой пояс GMT +3, время: 07:04. |