const str = ".1.2.1"

const str2 = ".1";

const func = (str, str2) => {
 ...
}

Ожидаемый результат = ".1.2"

Другой пример:

str = "CABC"
str2 = "C"
Expected output "CAB"

Поэтому последняя часть строки, которая соответствует концу строки, должна быть удалена.

Можно ли это сделать с помощью какой-то аккуратной встроенной функции в javascript?

Обновить

Обновленный пример строки. Простая замена не работает.

0
Joe 2 Май 2019 в 12:44

5 ответов

Лучший ответ

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

const
    replace = (string, pattern) => string.replace(new RegExp(pattern.replace(/\./g, '\\\$&') + '$'), '')

console.log(replace(".1.2.1", ".1"));
console.log(replace("CABC", "C"));
2
Nina Scholz 2 Май 2019 в 10:03

Просто попробуйте заменить \.\d+$ пустой строкой, используя замену регулярного выражения:

var input = "1.2.1";
input = input.replace(/\.\d+$/, "");
console.log(input);

Изменить:

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

var str = "CABC"
var str2 = "C"
var re = new RegExp(str2 + "$");
str = str.replace(re, "");
console.log(str);
5
Tim Biegeleisen 2 Май 2019 в 13:33

Вы можете создать динамическое регулярное выражение, используя RegExp. Добавленный $ заменит str2 из str ТОЛЬКО если он находится в конце строки

const replaceEnd = (str, str2) => {
  const regex = new RegExp(str2 + "$");
  return str.replace(regex, '')
}

console.log(replaceEnd('.1.2.1', '.1'))
console.log(replaceEnd('CABC', 'C'))
0
adiga 2 Май 2019 в 10:01

Вы можете проверить положение строки для поиска, используя lastIndexOf, и если она находится в предполагаемой позиции, то просто нарезать

function removeLastPart(str, str2)
{
  result = str;
  
  let lastIndex = str.lastIndexOf(str2);
  if (lastIndex == (str.length - str2.length))
  {
    result = str.slice(0, lastIndex)
  }
  return result;
}

console.log(removeLastPart(".1.2.1", ".1"));
console.log(removeLastPart("CABC", "C"));
console.log(removeLastPart(" ispum lorem ispum ipsum", " ipsum"));

// should not be changed
console.log(removeLastPart("hello world", "hello"));
console.log(removeLastPart("rofllollmao", "lol"));
0
Cid 2 Май 2019 в 10:04

Вы можете использовать String.prototype.slice

const str = "1.2.1"

const str2 = ".1";

const func = (str) => {
 return str.slice(0, str.lastIndexOf("."));
}

console.log(func(str));
0
Radonirina Maminiaina 2 Май 2019 в 09:49