Regex查找不匹配的小胡子表示法在正确出现时找到完全匹配



我正在尝试验证一些简单的胡子表示法,其中{{foo}}是正确的,{bar}}{{taz}是不正确的。

这些是我迄今为止尝试过的正则表达式。

/{{.*?}}/g是否正确出现

错误出现的/(^|[^{]){.*?}}/g/{{.*?}([^}]|$)/g

问题是不正确的正则表达式匹配正确的出现。

js 上的我的代码

function getTokenMatches(text) {
let tokenMatches = [];
const correctTokenMatches = text.match(/{{.*?}}/g);
if (correctTokenMatches) {
tokenMatches.push(...correctTokenMatches);
}
const openLeftTokenMatches = text.match(/[^{]{.*?}}/g);
if (openLeftTokenMatches) {
tokenMatches.push(...openLeftTokenMatches);
}
const openRightTokenMatches = text.match(/{{.*?}[^}]/g);
if (openRightTokenMatches) {
tokenMatches.push(...openRightTokenMatches);
}
tokenMatches = tokenMatches.map(token => {
let regex = new RegExp(/{{.*?}[^}]/g);
if (regex.test(token)) {
token = `${token}}`;
}
regex = new RegExp(/[^{]{{.*?}/g);
if (regex.test(token)) {
token = `{${token}`;
}
return token;
});
return tokenMatches;
}

示例:https://regex101.com/r/hD9oI7/4

您可以尝试先删除"好"模式,然后匹配{+ ... }+以找到"坏"模式:

markup = `
{{ this }} is {{ fine }} and so is {{ that }}
{this one}} is no good, and so is {{{{this one}
this is {{{more {{complicated}} ?? }
`
good = []
bad = []
m = markup
m = m.replace(/{{[^{}]+}}/g, m => good.push(m))
m = m.replace(/{+[^{}]+}+/g, m => bad.push(m))
console.log(good)
console.log(bad)

根据{{{ this }}应该是"好"还是"坏",您可以将"好"模式细化为

/[^{]{{[^{}]+}}[^}]/g

相关内容

  • 没有找到相关文章

最新更新