我正在尝试替换文件中的标记。一条线上可以有多个标记,并且分界线是&&
。
例:
{
"host": "&&main_service&&/&&auth_endpoint&&"
}
如果你使用正则表达式:
const delimiter = '&&';
const delimeterRegex = new RegExp(`${delimiter}.*${delimiter}`);
......问题是单独不匹配;它可以匹配整个字符串(所以我得到["&&main_service&&/&&auth_endpoint&&"]
作为结果,而不是获得["&&main_service&&", "&&auth_endpoint&&"]
)
我如何单独获得两个结果,而不是一起?
编辑:代码我用来做替换:
const findUnreplacedTokens = () => {
console.log('Scanning for unreplaced tokens...');
const errors = [];
lines.forEach((ln, i) => {
const tokens = delimeterRegex.exec(ln);
if (tokens) {
errors.push({
tokens,
line: i+1,
});
}
});
if (errors.length) {
handleErrors(errors);
} else {
console.log('No rogue tokens found');
console.log(logSpacing);
}
};
const regex = /&&(.*?)&&/g;
const str = `&&main_service&&/&&auth_endpoint&&`;
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(function(match, groupIndex) {
if(match.indexOf("&&") !== -1) return;
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
使用[^&]和g
(全局)
const delimeterRegex = new RegExp(`$ {delimiter} [^&] * $ {delimiter}`,'g');