Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.03.2016, 12:21
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Оптимизация кода 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.
Ответить с цитированием
  #2 (permalink)  
Старый 11.03.2016, 12:46
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Кому интересно, есть такой вариант, но хотелось бы именно при помощи 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)

}
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2016, 13:14
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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');
Ответить с цитированием
  #4 (permalink)  
Старый 11.03.2016, 13:36
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

destus,
прокомментируйте, пожалуйста, свой код
input.replace(/ (\b\w)(\w+\b)\s(\b\w)(\w+\b) /g

(\b\w)(\w+\b)\s -
\s - это пробел
(\b\w) - это словесный символ в начале или конце строки?
(\w+\b) - ?
Ответить с цитированием
  #5 (permalink)  
Старый 11.03.2016, 13:57
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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*) и заменяем.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода erilar AJAX и COMET 11 07.01.2015 19:49
Оптимизация и упрощение js кода Kaizoku Общие вопросы Javascript 1 02.12.2013 09:26
Оптимизация кода Nifler jQuery 6 30.09.2013 21:14
Оптимизация кода assd18 Общие вопросы Javascript 4 21.06.2013 15:26
Оптимизация кода Prizrak177 Общие вопросы Javascript 0 15.02.2011 16:36