【问题标题】:Javascript replacing double backslashed with single backslashJavascript用单反斜杠替换双反斜杠
【发布时间】:2015-01-04 06:58:03
【问题描述】:

我浏览了很多解决方案,但为什么没有任何工作。

我需要用"i:0#.w|dev\tauri;"替换以下字符串:"i:0#.w|dev\\tauri;"

我尝试了以下JS代码来替换:

s.replace(/\\\\/g, "\\$1");

s.replace(/\\\\/g, "\\");

但是没有结果。然而以下用"替换了我的\\

s.replace(/\\/g, "\"");

老实说,我真的很困惑这个逻辑,似乎应该使用\\\\ 进行双反斜线,但它似乎只使用\\ 来进行两个反斜线..

我需要这样做来比较当前 Sharepoint 用户 (i:0#.w|dev\tauri) 是否在列表中。

更新:

好吧,在我使用console.log();之后,我发现了一些有趣的东西。

Incode:var CurrentUser = "i:0#.w|dev\tauri"; 和 console.log():i:0#.w|dev auri...

C#代码如下:

SPWeb theSite = SPControl.GetContextWeb(Context);
SPUser theUser = theSite.CurrentUser;
return theUser.LoginName;

【问题讨论】:

  • 如果前两个什么都不做,并且s.replace(/\\/g, "\""); 用一个" 替换了你的\\ ,那么你的字符串中只有一个反斜杠开头。不要将您在调试器中看到的内容与字符串中反斜杠的实际数量相混淆。
  • 但问题是,即使我不尝试替换,那么比较两个字符串仍然是错误的
  • 分号与它有什么关系,还是那些错字?请这样做:用你要修改的字符串做一个console.log(),用你要匹配的字符串做一个console.log(),观察它们之间是否有任何区别。
  • 看看我的回答。那是因为 \t 是选项卡的转义码。

标签: javascript replace


【解决方案1】:

JavaScript strings need to be escaped 因此,如果您得到一个带有两个反斜杠的字符串文字,JavaScript 会将其解释为一个。在您用来比较的字符串中,您有 \t,它是一个制表符,而您可能想要的是 \\t。我的猜测是,无论您从何处获取当前 SharePoint 用户,它都会被正确转义,但您的比较列表却没有。

编辑:

或者也许反过来。如果您使用 .NET 4+ JavaScriptStringEncode 可能会有所帮助。如果您仍然遇到问题,向我们展示您是如何进行比较的可能会有所帮助。

【讨论】:

  • 用Regex.Escape(); 让它在代码后面工作,谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2014-10-07
  • 2013-04-15
  • 2017-07-25
相关资源
最近更新 更多