Как убрать *| в начале и |* в конце строки
У меня проблемы с созданием регулярного выражения, которое соответствует *|VALUE|*
я хочу удалить *|
а также |*
но регулярное выражение, которое я использую, только обнаруживает *|
str = *|VALUE|*
str.replace(/(^\*\||\|\*$)/, '') // VALUE|*
Оператор OR, похоже, не срабатывает.
3 ответа
(Ссылаясь на оригинальное название этого вопроса) /^\*\|.*\|\*$/
соответствует строке, которая начинается с *|
и заканчивается |*
,
Так что вы можете сделать это:
var str = '*|VALUE|*';
var trimmed = str.replace(/^\*\|(.*)\|\*$/, '$1');
console.log(trimmed);
Или используйте свое оригинальное регулярное выражение, но с g
(глобальный) в конце. И не забудьте второй аргумент .replace
:
var str = '*|VALUE|*';
var trimmed = str.replace(/(^\*\||\|\*$)/g, '');
console.log(trimmed);
Ваше регулярное выражение соответствует обоим случаям. Вам не нужна группа захвата ^\*\||\|\*$
,
Вы можете использовать заменить:
var str = "*|VALUE|*";
str = str.replace(/^\*\||\|\*$/g, "");
console.log(str);
И действительно, как упоминалось в комментарии @melpomene, вы должны использовать /g
флаг, который выполняет глобальный поиск.
В зависимости от того, что вы хотите сделать, вы можете захватить каждую часть регулярного выражения отдельно, а затем использовать замену внутри str.replace
, (MDN). Это может помочь вам изменить строку, такую как *|VALUE|*
что-то вроде (VALUE)
Во-первых, вы должны изменить внутреннюю часть на .*
который будет просто соответствовать всем символам между двумя символами, которые вы хотите.
let str = `*|VALUE|*`
let result = str.replace(/^(\*\|)(.*)(\|\*)$/, "($2)")
console.log(result)