为什么用正则表达式更改条件替换()而不是结果

时间:2015-04-30 10:19:47

标签: javascript regex

我有以下代码:

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/

2 个答案:

答案 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+" 

工作正常