Я пытаюсь сопоставить следующий текст уценки для акцента:
_this should match_
__this shouldn't__
_ neither should this _
_nor this _
this _should match_as well_
__ (double underscore, shouldn't match)
Проблема, с которой я сталкиваюсь своими собственными усилиями, а также другими решениями для SO, состоит в том, что они все равно заканчиваются тем, что совпадают третья строка:
_ neither should this _
Есть ли способ проверить мой конкретный вариант использования? Я нацеливаюсь на это для браузерных приложений, и поскольку Firefox и Safari еще не поддерживают lookbehinds , есть ли способ сделать это без lookbehinds?
Вот шаблон регулярного выражения, который я до сих пор придумали: /(_)((?!\1|\s).*)?\1/
К счастью, я могу выполнить почти все свои проверки, однако мой шаблон все еще совпадает:
_nor this _
__ (double underscore, shouldn't match)
Итак, есть ли способ убедиться, что между подчеркиванием есть хотя бы один символ и что они не отделены от текста пробелом?
Ссылка на игровую площадку regexr: regexr.com / 5300j
Пример:
const regex = /(_)((?!\1|\s).*)?\1/gm;
const str = `_this should match_
__this shouldn't__
_ neither should this _
_nor this _
this _should match_as well_
__
_ neither should this _`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}