我在网页上有一些输入,我将重新显示并提交到其他地方。目前的问题是,我希望在将输入提交到别处之前,将所有单个反斜杠加倍,这些反斜杠夹在非反斜杠字符之间。
测试字符串"domain\name\\nonSingle\\\WontBe\\\\Returned"
,我想只获得域和名称之间的第一个单反斜杠。
此字符串不应为"\\get\\\nothing\\\\"
我最接近的当前模式是[\w][\\](?!\\)
但是这将从我列出的第一个测试字符串中获得"\n"
。我想使用lookbehind为正则表达式,但javascript对我正在使用的版本没有这样的东西。这是我在http://www.regexpal.com/
目前我无效地使用这个正则表达式[\w][\\](?!\\)
来提取所有单反斜杠夹在非反斜杠字符和它们之前的字符(我不想要)之间然后替换它使用相同的字符串加上一个反斜杠。
例如,给定domain\name\\bl\\\ah
我的当前正则表达式[\w][\\]\(?!\\)
将返回"n\"
。这导致我的代码不得不进行一些额外的处理,而不仅仅是使用替换。
我不关心任何双重,三重或四重反斜杠,它们可以单独使用。
答案 0 :(得分:0)
匹配转义的最简单方法是匹配所有转义字符。
\\(.)
然后在替换中,根据捕获的内容决定如何处理它。
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);
&#13;
偶数(从零开始计算)项目将是不匹配的文本。奇数项目将是捕获的文本。
每个捕获的文本都应被视为前一文本的一部分。
答案 1 :(得分:0)
例如,给定
domain\name\\bl\\\ah
,我当前的正则表达式[\w][\\]\(?!\\)
将返回"n\"
。这导致我的代码不得不做一些额外的处理,而不仅仅是使用replace。
它将执行仅使用replace ,因为您可以使用$&
插入匹配的子字符串,请参见:
console.log(String.raw`domain\name\\bl\\\ah`.replace(/\w\\(?!\\)/g, "$&\\"))