RegExp получить любое значение между символами с самими символами
пытаюсь получить значение в стринге между символами и немного не хватает опыта в написании RegExp. Буду рад любой помощи.
У меня есть стрига Hello ___world___ из нее мне нужно получить _world_. вместо world может быть другое любое значение. К примеру:
Hello ______ -> должно вернуть null/undefined
Hello ___world__ -> должно вернуть _world_
Hello ___wor_l_d___ -> должно вернуть _wor_l_d_
Hello __*$world__ -> должно вернуть _*$world_
Hello world__ -> должно вернуть null/undefined
Сейчас у меня выходит так:
const reg = /(?<=_)(.*)(?=_)/;
const string1 = "Hello ___world___";
const string2 = "Hello ______";
const string3 = "Hello ___wor_l_d___";
const string4 = "Hello ___*$world___";
const string5 = "Hello world__";
console.log(string1.match(reg));
console.log(string2.match(reg));
console.log(string3.match(reg));
console.log(string4.match(reg));
console.log(string5.match(reg));
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте
/_[^_]+(?:_[^_]+)*_/g
См. пример работы регулярного выражения.
Подробности:
_- символ_[^_]+- один и более символов, отличных от символа_(?:_[^_]+)*- ноль и более повторов символа_, за которым следует один и более символов, отличных от символа__- символ_.
См. пример работы кода на JavaScript:
const reg = /_[^_]+(?:_[^_]+)*_/g;
const strings = ["Hello ___world___", "Hello ______", "Hello ___wor_l_d___", "Hello ___*$world___", "Hello world__"];
for (const s of strings) {
console.log(s, '=>', s.match(reg)?.[0]);
}