传递网址时保留原始反斜杠的问题

时间:2012-03-29 13:13:25

标签: javascript jquery regex

我有一个应用程序,它解析字符串并通过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>";

打破我的思维过程。不行。我错过了什么?

谢谢!

4 个答案:

答案 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