我有一个input框,用户可以在其中输入文本。我正在使用输入的文本并替换了大文本文件的一部分。

问题是,如果用户输入$&字符,则会导致lastMatch而不是文字文本,后者当然是美元符号($),后跟与号(&),没有任何特殊含义含义。

您可以在此处看到用户输入:

javascript - 字符串中转义RegExp.lastMatch($&)-LMLPHP

为了模拟用户输入,我编写了以下代码:



var originalString = "# Mandatory parameter\n#EPCDatabase/EPCdatabase.param/epc.db.user=\n# Mandatory parameter";

var regexExpression = new RegExp('#EPCDatabase\/EPCdatabase.param\/epc.db.user=.*$', "im");
var replaceSting = "EPCDatabase\/EPCdatabase.param\/epc.db.user=test#$#%^%>$&<%(*"
var newPropertiesText = originalString.replace(regexExpression, replaceSting);

console.log(originalString);
console.log(newPropertiesText);





问题在于,它不是附加字面意义上的$&,而是将附加lastMatch和newPropertiesText创建如下:

javascript - 字符串中转义RegExp.lastMatch($&)-LMLPHP

As explained here,我尝试用两个$来转义$$,所以这将意味着字面的美元而不是特殊的组合:

"EPCDatabase\/EPCdatabase.param\/epc.db.user=aaaa#$#%^%>$&<%(*".replace(/\$&/g, '$$&');
                                   here is the problem  ^^


但这没有帮助,所以我尝试了\\$\\$和类似模式的不同组合。但是我无法将简单的$&文字发送给正则表达式。

编辑:
使用此escape函数不能解决问题:



RegExp.escape= function(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

var originalString = "# Mandatory parameter\n#EPCDatabase/EPCdatabase.param/epc.db.user=\n# Mandatory parameter";

var regexExpression = new RegExp('#EPCDatabase\/EPCdatabase.param\/epc.db.user=.*$', "im");
var replaceSting = RegExp.escape("EPCDatabase\/EPCdatabase.param\/epc.db.user=aaaa#$#%^%>$&<%(*");
var newPropertiesText = originalString.replace(regexExpression, replaceSting);
console.log(originalString);
console.log(newPropertiesText);





您可以看到它仍然返回lastMatch

最佳答案

因此,经过更多的阅读,思考,一些尝试和更多的#FFFFFF头发,我得到了解决此问题的方法。

为了告诉正则表达式放置文字$&而不是entire match,您必须使用以下内容:

.replace(/\$&/, '$$$$&')

$$告诉正则表达式引擎一个文字美元符号,$$$$告诉它两个文字美元符号->和两个文字美元符号,在替换字符串中一个接一个地变成一个文字美元$
后跟一个&,它成为没有$&含义的普通文字last match



var originalString = "# Mandatory parameter\n#EPCDatabase/EPCdatabase.param/epc.db.user=\n# Mandatory parameter";

var regexExpression = new RegExp('#EPCDatabase\/EPCdatabase.param\/epc.db.user=.*$', "im");
var replaceSting = "EPCDatabase\/EPCdatabase.param\/epc.db.user=aaaa#$#%^%>$&<%(*".replace(/\$&/, '$$$$&');
var newPropertiesText = originalString.replace(regexExpression, replaceSting);
console.log(originalString);
console.log(newPropertiesText);





如果您想玩它,可以view the code here

关于javascript - 字符串中转义RegExp.lastMatch($&),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40636018/

10-09 22:59