Оптимизация кода 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, время: 12:16. |