2016-11-14 5 views
1

У меня есть предложение, что я хотел бы иметь только последние и оставшиеся, и удалить остальные.Удалить определенные слова, кроме последнего в JavaScript?

«львы, и тигры, и медведи, и слоны», и я хотел бы превратить это в:

«львы, тигры, медведи и слоны».

Я попытался использовать шаблон регулярного выражения, как str = str.replace(/and([^and]*)$/, '$1'); который явно не работал. Благодарю.

+0

'split' на слово, которое вы хотите,' join' с пустым во всех экземплярах, кроме последнего. – Marty

+1

http://stackoverflow.com/questions/9694930/remove-all-occurrences-except-last – Marty

ответ

4

Применение this regex:

and (?=.*and) 
  • and совпадает с любым и последующим пробелом. Пространство подобрано таким образом он удаляется на замене, чтобы предотвратить имея 2 пространством
  • (?=.*and) является опережением, то есть он будет соответствовать только если за ними следует .*and, если за ними следует и

Используйте этот код:

str = str.replace(/and (?=.*and)/g, ''); 
+0

отлично! хотя я пошел с этой 'str = str.replace (/ \ и (? =. * и)/g, ''); спасибо. – sarcastasaur

+0

Ваш код не работает. Вам нужно использовать литерал регулярного выражения, а не строку. – 4castle

1

Вы можете использовать положительный прогноз вперед (?=...), чтобы увидеть, есть ли еще and перед текущим матчем. Вам также нужно сделать глобальное регулярное выражение g.

function removeAllButLastAnd(str) { 
 
    return str.replace(/and\s?(?=.*and)/g, ''); 
 
} 
 

 
console.log(removeAllButLastAnd("Lions, and tigers, and bears, and elephants"));

0
var multipleAnd = "Lions, and tigers, and bears, and elephants"; 
var lastAndIndex = multipleAnd.lastIndexOf(' and'); 
var onlyLastAnd = multipleAnd.substring(0, lastAndIndex).replace(/ and/gi, '')+multipleAnd.substring(lastAndIndex); 
console.log(onlyLastAnd); 
+0

Попробуйте объяснить свой ответ – Nikhil

Смежные вопросы