我有一个应用程序,它解析字符串并通过jQuery将它们传递给弹出窗口。我传递的一些字符串包含网址或内部C:驱动器位置的字段。当我将字符串传递给窗口时,Windows路径中的反斜杠(“\”)被剥离(使用forwardslash的网址当然没有问题。我试图将这些字符串作为链接传递,所以用户可以直接点击链接然后关闭它们。显然,如果反斜杠被剥离,链接就不起作用了。我该怎么测试呢?我试过一些不起作用的简单正则表达式。< / p> 编辑:我正在解析的字符串来自Sharepoint应用程序列表,我无法控制它们的格式,只需将它们作为“\ drive \ then \ the \ path \ to \ the \”输入到列表中文件”。我的理解是我需要检查是否有反斜杠,然后通过添加另一个反斜杠来逃避它。但是如何?
编辑2:很高兴知道我在正确的轨道上。从我在互联网上看到的内容来看,我认为这是沿着这条线的东西。但是,我仍然无法让这个工作。也许你们大家可以帮助我......
我已经从sharepoint列表中抓取了这样的字段(sharepoint存储前缀为'ows _'的字段名称:
var devPath = "<a class='h_link' href='"+$(this).attr('ows_DEVPathURLServer')+"'>"+$(this).attr('ows_DEVPathURLServer')+"</a>";
如上所述,这适用于网址。
然后我搞了一个.replace(/ \ / g,'\\');,但它不会运行。所以我想我会尝试:
var unregged = $(this).attr('ows_DEVPathURLServer');
var regged = unregged.toString().split('\\').join('\\\\');
alert(regged);
var devPath = "<a class='h_link' href='"+regged+"'>"+regged+"</a>";
打破我的思维过程。不行。我错过了什么?
谢谢!
答案 0 :(得分:3)
这是一个更快,无正则表达式的单行解决方案:
myString.split('\\').join('\\\\');//replaces all backslashes with double backslashes.
在这里使用regexp只是矫枉过正......
答案 1 :(得分:2)
你需要用另一个反斜杠来逃避你的反斜杠。您传递的网址看起来像这样:
C:\\ mydrive \\ MyFolder文件
答案 2 :(得分:2)
为了“加倍”每个反斜杠,你可以这样做:
myString.replace(/\\/g, '\\\\')
请注意,每次在代码中看到两个反斜杠时,它实际上是一个,因为我们需要在代码中转义它们。
g
表示全局替换,因此如果您有多个\将全部替换。
答案 3 :(得分:2)
您只需检查这是否是“本地”位置,并在传递之前将其转换为File URI scheme。
这样的事情可以解决问题:
var localPathRegex = /^\\(\w)\\/i;
if (localPathRegex.test(url)){
url = url.replace(localPathRegex, 'file:///$1:/').replace(/\\/g, '/');
}
这会将\d\then\the\path\to\the\file
转换为file:///d:/then/the/path/to/the/file