Javascript - заменить символ внутри подстроки строки - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть строка наподобие "this/ is an example abc/def/fgh/uio to give you an example"

Я бы хотел выбрать самое длинное слово и заменить на этой подстроке любое "/" на "+".

Мне удалосьопределите самое длинное слово, и я бы знал, как заменить ВСЕ "/" на "+" НО я не знаю, как заменить "/" только в самом длинном слове.

Вот что яполучил так далеко

//identify longest word in string
function longestWord(str) {
  var words = str.split(' ');
  return words.reduce(longer);
}
function longer(champ, contender) {
  return (contender.length > champ.length) ? contender: champ;
}

//purely given an exemple, some strigns won't be exactly like this
var text2 = "this/ is an example abc/def/fgh/uio to give you an example"

if (longestWord(text2) > 30 ) {
  text2.replace(/\//g, ' / ');
}

Проблема в том, что это также заменит "/" в подстроке "this /", и я не хочу этого.

Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

@ Решение CertainPermance гораздо более элегантно (и я считаю его производительным), чем это, но, поскольку я написал ответ, я подумал, что с таким же успехом могу его вставить.

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

const data = "this/ is an example abc/def/fgh/uio to give you an example";

const getLongestWordIndex = stringIn => stringIn
  .split(' ')
  .reduce(
    (prev, curr, i) => curr.length > prev.length ? {
      index: i,
      length: curr.length
    } : prev,
    {
      length: -1,
      index: -1
    }
  ).index

const replaceLongestWord = (sentence, replacer) => {
  const longestWordIndex = getLongestWordIndex(sentence);
  const words = data.split(' ');

  return Object.values({
    ...words,
    [longestWordIndex]: replacer(words[longestWordIndex])
  }).join(' ')
}

const wordReplaceFunction = word => word.replace(/\//g, '+')

const result = replaceLongestWord(data, wordReplaceFunction);

console.dir(result)
0 голосов
/ 04 февраля 2019

Ваша функция longestWord возвращает самое длинное слово в строке, поэтому вы можете передать только эту строку (не регулярное выражение) в качестве первого аргумента .replace и заменить на (второйаргумент) /\//g вызвал это самое длинное слово:

function getLongestWord(str) {
  var words = str.split(' ');
  return words.reduce(longer);
}
function longer(champ, contender) {
  return (contender.length > champ.length) ? contender: champ;
}

var text2 = "this/ is an example abc/def/fgh/uio to give you an example"

const longestWord = getLongestWord(text2);
const output = text2.replace(longestWord, longestWord.replace(/\//g, '+'));
console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...