URL中的RegExp选择

时间:2018-02-28 16:29:09

标签: javascript regex

我正在尝试替换文件中的标记。一行上可以有多个标记,并且分隔符为&&

示例:

{
  "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);
  }
};

2 个答案:

答案 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}`);
    });
}