我的正则表达式在regex101.com沙箱中工作但不在实际的javascript中

时间:2016-04-08 14:39:40

标签: javascript regex

我创建了正则表达式来削减源代码的一部分。

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

我在regex101.com where it appears to work上测试了它。

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

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

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

3 个答案:

答案 0 :(得分:2)

您的输入字符串与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)

答案 1 :(得分:0)

在正则表达式上使用template literals和多行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>';
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我看到你的代码存在的问题是源字符串没有被正确转义。

&#13;
&#13;
// 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]);
&#13;
&#13;
&#13;