Как убрать *| в начале и |* в конце строки

У меня проблемы с созданием регулярного выражения, которое соответствует *|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)

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