我正在尝试替换文件中的标记。一行上可以有多个标记,并且分隔符为&&
。
示例:
{
"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);
}
};
答案 0 :(得分:0)
使用[^&]和g
(全局)
const delimeterRegex = new RegExp(`$ {delimiter} [^&] * $ {delimiter}`,'g');
答案 1 :(得分:0)
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}`);
});
}