我有一些输入,在一个网页,我将重新显示和提交到其他地方。当前的问题是,在向其他地方提交输入之前,我希望将夹在非反斜杠之间的所有单个反斜杠加倍。
测试字符串"domain\name\\nonSingle\\\WontBe\\\\Returned",我只想得到第一个反斜杠,在域名和名称之间。
此字符串不应获得任何"\\get\\\nothing\\\\"
我可以使用的当前模式是[\w][\\](?!\\),但是这将从我列出的第一个测试字符串中得到"\n"。我想对regex使用lookbehind,但是javascript在我使用的版本中没有这样的东西。这是我在http://www.regexpal.com/上测试我的正则表达式的站点
目前,我没有效率地使用这个regex [\w][\\](?!\\)提取所有夹在非反斜杠字符和它们前面的字符之间的反斜杠(我不想要),然后用相同的字符串加上末尾的反斜杠替换它。
例如,给定domain\name\\bl\\\ah,我的当前正则表达式[\w][\\]\(?!\\)将返回"n\"。这导致我的代码不得不做一些额外的处理,而不仅仅是使用替换。
我不在乎任何双、三、四倍的反斜杠,它们可以单独使用。
发布于 2018-11-22 10:08:37
例如,给定
domain\name\\bl\\\ah,我的当前正则表达式[\w][\\]\(?!\\)将返回"n\"。这导致我的代码不得不做一些额外的处理,而不仅仅是使用替换。
它只需使用替换,因为您可以使用$&插入匹配的子字符串,请参见:
console.log(String.raw`domain\name\\bl\\\ah`.replace(/\w\\(?!\\)/g, "$&\\"))
发布于 2016-12-19 07:39:03
最简单的方法是匹配转义,是匹配所有转义字符。
\\(.)然后在替换中,根据被捕获的内容来决定如何处理它。
var s = "domain\\name\\\\backslashesInDoubleBackslashesWontBeReturned";
console.log('input:', s);
var r = s.replace(/\\(.)/g, function (match, capture1) {
return capture1 === '\\' ? match : '$' + capture1;
});
console.log('result:', r);
最接近真正匹配未转义反斜杠的方法是
((?:^|[^\\])(?:\\\\)*)\\(?!\\)它将匹配奇数反斜杠,并将除最后一个反斜杠之外的所有反斜杠捕获到捕获组1中。
var re = /((?:^|[^\\])(?:\\\\)*)\\(?!\\)/g;
var s = "domain\\name\\\\escapedBackslashes\\\\\\test";
var parts = s.split(re);
console.dir(parts);
var cleaned = [];
for (var i = 1; i < parts.length; i += 2)
{
cleaned.push(parts[i-1] + parts[i]);
}
cleaned.push(parts[parts.length - 1]);
console.dir(cleaned);
偶数(从零计数)项目将是不匹配的文本。奇数项目将是捕获的文本。
每个捕获的文本都应被视为前一个文本的一部分。
https://stackoverflow.com/questions/41215139
复制相似问题