首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在非反斜杠字符之间转义单个反斜杠

问仅在非反斜杠字符之间转义单个反斜杠
EN

Stack Overflow用户
提问于 2016-12-19 02:50:56
回答 2查看 1.5K关注 0票数 1

我有一些输入,在一个网页,我将重新显示和提交到其他地方。当前的问题是,在向其他地方提交输入之前,我希望将夹在非反斜杠之间的所有单个反斜杠加倍。

测试字符串"domain\name\\nonSingle\\\WontBe\\\\Returned",我只想得到第一个反斜杠,在域名和名称之间。

此字符串不应获得任何"\\get\\\nothing\\\\"

我可以使用的当前模式是[\w][\\](?!\\),但是这将从我列出的第一个测试字符串中得到"\n"。我想对regex使用lookbehind,但是javascript在我使用的版本中没有这样的东西。这是我在http://www.regexpal.com/上测试我的正则表达式的站点

目前,我没有效率地使用这个regex [\w][\\](?!\\)提取所有夹在非反斜杠字符和它们前面的字符之间的反斜杠(我不想要),然后用相同的字符串加上末尾的反斜杠替换它。

例如,给定domain\name\\bl\\\ah,我的当前正则表达式[\w][\\]\(?!\\)将返回"n\"。这导致我的代码不得不做一些额外的处理,而不仅仅是使用替换。

我不在乎任何双、三、四倍的反斜杠,它们可以单独使用。

EN

回答 2

Stack Overflow用户

发布于 2018-11-22 10:08:37

例如,给定domain\name\\bl\\\ah,我的当前正则表达式[\w][\\]\(?!\\)将返回"n\"。这导致我的代码不得不做一些额外的处理,而不仅仅是使用替换。

它只需使用替换,因为您可以使用$&插入匹配的子字符串,请参见:

​

代码语言:javascript
复制
console.log(String.raw`domain\name\\bl\\\ah`.replace(/\w\\(?!\\)/g, "$&\\"))

​

票数 1
EN

Stack Overflow用户

发布于 2016-12-19 07:39:03

最简单的方法是匹配转义,是匹配所有转义字符。

代码语言:javascript
复制
\\(.)

然后在替换中,根据被捕获的内容来决定如何处理它。

​

代码语言:javascript
复制
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);

​

最接近真正匹配未转义反斜杠的方法是

代码语言:javascript
复制
((?:^|[^\\])(?:\\\\)*)\\(?!\\)

它将匹配奇数反斜杠,并将除最后一个反斜杠之外的所有反斜杠捕获到捕获组1中。

​

代码语言:javascript
复制
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);

​

偶数(从零计数)项目将是不匹配的文本。奇数项目将是捕获的文本。

每个捕获的文本都应被视为前一个文本的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41215139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档