我有以下代码:
var code = $('#code');
var str = code.val();
console.log(str);
var re = new RegExp("^press\\\(\\\"" + "KEY_6" + "\\\"\\\)\\n+(.*)", "m");
console.log(re);
var res = str.replace(re,'');
console.log(res);
code.val(res);
当用户将其输入textarea时:
press("KEY_3")
press("KEY_6")
press("KEY_9")
它应该用空字符串替换按(" KEY_9")。但是,它也取代了条件按(" KEY_6")
你能帮助我理解为什么它没有按照假设工作的原因吗?以下链接示例:http://jsfiddle.net/vfn8dtn4/
答案 0 :(得分:3)
您应该捕获要保留的组,然后替换为$1
:
...
var re = new RegExp("^([\\s\\S]*press\\\(\\\"" + "KEY_6" + "\\\"\\\))[\\n\\r]+.*", "m");
console.log(re);
var res = str.replace(re,'$1');
...
请参阅updated code
输出:
press("KEY_6")
press("KEY_1")
press("KEY_6")
当我们在模式开始时添加[\\s\\S]*
时,我们会确保在第一个press
之前匹配尽可能多的字符,因此我们会捕获 last KEY_6
。
答案 1 :(得分:0)
最后的(。*)消耗了“KEY_6”之后的所有字符和新行字符。如果删除即
"^press\\\(\\\"" + "KEY_6" + "\\\"\\\)\n+"
工作正常