Заменить последнюю часть строки, JavaScript - PullRequest
0 голосов
/ 02 мая 2019
const str = ".1.2.1"

const str2 = ".1";

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

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

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

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

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

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

Обновление

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

Ответы [ 5 ]

5 голосов
/ 02 мая 2019

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

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

Edit:

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

var str = "CABC"
var str2 = "C"
var re = new RegExp(str2 + "$");
str = str.replace(re, "");
console.log(str);
2 голосов
/ 02 мая 2019

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

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

console.log(replace(".1.2.1", ".1"));
console.log(replace("CABC", "C"));
0 голосов
/ 02 мая 2019

Вы можете проверить положение строки, чтобы найти, используя 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 голосов
/ 02 мая 2019

Вы можете создать динамическое регулярное выражение, используя 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 голосов
/ 02 мая 2019

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

const str = "1.2.1"

const str2 = ".1";

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

console.log(func(str));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...