Вход

Просмотр полной версии : Получить три последних слова в строке, используя regexp?


William Blake
11.05.2017, 19:51
Например, есть строка "Der Abend ist jung und wir haben viel vor" или "Er hat sich ein Haus am Meeresstrand gekauft". Дле первой строки я получу "haben viel vor", для второй — "am Meeresstrand gekauft". И если можно такие резудльтаты получить, то как? Например, такое регулярное выражение ищет какое-либо одно слово на латинице в предложении, при чем последнее: /\b\w{1,}$/ . Так, для первой строки я бы получил vor, а для второй — gekauft.
Честно говоря, особо не разбираюсь в regexp и просто нахожусь в погоне за быстрым решением. На веб-странице есть некоторая textArea, в нее вводят предложения и нужно постоянно отбирать из введенного последние три слова. Можно, конечно, все это без regexp написать, но не хочется возиться с распарсиванием строк.

William Blake
11.05.2017, 19:56
Тфу, ну, собственно \w+\s\w+\s\w+ .

рони
11.05.2017, 20:09
William Blake,
var str = "Der Abend ist jung und wir haben viel vor"
alert( str.split(/\s+/).slice(-3) );

William Blake
11.05.2017, 20:14
Спасибо! А что быстрее будет в данном случае, использовать то, что предложили Вы или regexp?

рони
11.05.2017, 20:26
William Blake,
если у вас не миллионы строк, то без разницы, regexp считается медленнее, но надо сравнивать.

Alexandroppolus
12.05.2017, 10:19
alert(/\w+\s+\w+\s+\w+(?=\s*$)/.exec('Der Abend ist jung und wir haben viel vor')[0]);


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