Заменить строку другой строкой в ​​некоторых условиях

Я хочу заменить последнее слово x на y, если y включает последнее слово x. Как я могу с этим справиться?

let x ='jaguar lion tiger panda'
let y = 'pandas'

ожидаемый результат:

'jaguar lion tiger pandas'

если

y = 'cat'

Ожидаемый результат:

'jaguar lion tiger panda cat'

Код, который я пробовал:

console.info(response)
let before = this.text.split(' ')
console.info(before)
console.info(before.length)
let a = before.slice(before.length-1)
console.info(a)
if (response.data.text[0].includes(a)) {
  let x = (before.slice(0, before.length-1))
  let y = x.replace(',', ' ')
  this.preResult = y.push(response.data.text[0])
} else {
  this.preResult.push(this.text + ' ' + response.data.text[0])
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать регулярное выражение для сопоставления последнего слова, а затем провести тест, проверив, соответствует ли yincludes слову или нет. Если это так, замените слово на y, иначе замените исходным словом, соединенным с y:

const x ='jaguar lion tiger panda'

const doReplace = y => x.replace(
  /\S+$/, // match non-space characters, followed by the end of the string
  (word) => (
    y.includes(word)
    ? y
    : word + ' ' + y
  )
);
console.info(doReplace('pandas'));
console.info(doReplace('cat'));

Регулярные выражения - очень мощный и лаконичный инструмент для сопоставления строк и управления ими. Программистам очень полезно знать их. Однако используемый здесь очень простой - \S+ соответствует непробельным символам, а $ соответствует концу строки.

CertainPerformance 07.01.2019 07:58

и мне нужно заменить panda на pandas, потому что он включен в pandas. ты тоже можешь это сделать?

user10877669498464651468548513 07.01.2019 07:59

Код в ответе делает это из-за теста .includes - нажмите «Выполнить фрагмент кода», чтобы увидеть.

CertainPerformance 07.01.2019 08:00

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

user10877669498464651468548513 07.01.2019 08:01

Это действительно обширная область - она ​​довольно основана на мнениях, так что решать вам.

CertainPerformance 07.01.2019 08:05

этот фрагмент не работает так, как вы описываете, я пытаюсь понять. не лениться, а просто хотел, чтобы вы знали.

user10877669498464651468548513 07.01.2019 08:07

не заменяет панду пандами добавляет к ним панд ягуар лев тигр панда панда ягуар лев тигр панда кошка

user10877669498464651468548513 07.01.2019 08:08

Ой, я этого не видел, надо делать y.includes(word), а не word.includes(y), я пропустил дублированные "панды"

CertainPerformance 07.01.2019 08:10

Другое решение:

    let x ='jaguar lion tiger panda'
    let y = 'pandas'
    let splited = x.split(' ')
    let lastWord = splited[splited.length - 1]
    
    if (y.indexOf(lastWord) >= 0){
        splited[splited.length - 1] = y
    }else{
        splited.push(y)
    }
    
    let result = splited.join(' ')
    console.info(result)

Я пытаюсь это понять. похоже, это работает, спасибо.

user10877669498464651468548513 07.01.2019 08:11
function replaceLastWord(x, y) {
    let result = x.split(' '), lastIndex = (result.length || 1) - 1, lastWord = result[lastIndex]
    result[lastIndex] = y.indexOf(lastWord) !== -1 ?  y : `${lastWord} ${y}`
    return result.join(' ')
}

console.info(replaceLastWord('jaguar lion tiger panda', 'pandas'))
console.info(replaceLastWord('jaguar lion tiger panda', 'cat'))
console.info(replaceLastWord('', 'pandas'))

Другие вопросы по теме