我的regex可以在regex101.com沙箱中工作,但不能在实际的javascript中工作

My regex works in regex101.com sandbox but not in actual javascript

本文关键字:工作 javascript 但不能 regex regex101 com 我的      更新时间:2024-03-23

我创建regex是为了从源代码中截取一些部分。

/SRC_START'n(['s'S]*?)'n'/'/SRC_END/i

我在regex101.com上测试了它,在那里它似乎可以工作。

但它在我的控制台上不起作用:

"ddd'
//SRC_START'
  function bounce(objectA, objectB) {} '
  '
//SRC_END'
  return bounce;'
})".match(/SRC_START'n(['s'S]*?)'n'/'/SRC_END/i)

正如您所看到的,我逐字逐句地复制了mylege101片段中的数据。得到的结果是null

您的输入字符串与regex101上的字符串不同。

将您的输入声明为:

var str = 'ddd'n//SRC_START'n  function bounce(objectA, objectB) {} 'n'n//SRC_END'n  return bounce;'n})'n';

然后这样做:

var re = /SRC_START'n(['s'S]*?)'n'/'/SRC_END/i;
var m = str.match(re);

将给出此匹配数组:

["SRC_START
  function bounce(objectA, objectB) {} 
//SRC_END", "  function bounce(objectA, objectB) {} 
"]

在控制台中执行所有内联操作:

"ddd'n'
//SRC_START'n'
  function bounce(objectA, objectB) {}'n '
  '
//SRC_END'n'
  return bounce;'n'
})".match(/SRC_START'n(['s'S]*?)'n's*'/'/SRC_END/i)

在regex上使用模板文字和多行m标志。

var matches = `ddd
//SRC_START
  function bounce(objectA, objectB) {}
//SRC_END
  return bounce;
})`.match(/SRC_START'n(['s'S]*?)'n'/'/SRC_END/im);
console.log(matches);
document.body.innerHTML = '<pre>' + JSON.stringify(matches, 0, 4) + '</pre>';

我看到,您的代码的问题是源字符串没有正确转义。

// the src must be properly escaped
var src = "ddd'n"+
"//SRC_START'n"+
" function bounce(objectA, objectB) {} 'n"+
"'n"+
"//SRC_END'n"+
" return bounce;'n"+
"})'n"+
"";
var match = src.match(/SRC_START'n(['s'S]*?)'n'/'/SRC_END/i);
alert("WHOLE MATCH:'n" + match[0] + "'n'nCAPTURED GROUP:'n" + match[1]);