我有一个input
框,用户可以在其中输入文本。我正在使用输入的文本并替换了大文本文件的一部分。
问题是,如果用户输入$&
字符,则会导致lastMatch而不是文字文本,后者当然是美元符号($
),后跟与号(&
),没有任何特殊含义含义。
您可以在此处看到用户输入:
为了模拟用户输入,我编写了以下代码:
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
创建如下: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/