【问题标题】:Why does String.prototype.replace remove "$'" from my string?为什么 String.prototype.replace 从我的字符串中删除“$'”?
【发布时间】:2014-09-01 10:17:45
【问题描述】:

我没有使用 JQuery,所以我认为这不会造成麻烦。我首先使用 iOS 自动化工具遇到了这个问题,然后使用 JSFiddle 进行了验证。如果有人能告诉我解决这个问题的方法,那就太棒了。

var str = "<'pass!23$'>";
var str1 = str.replace("<'pass!23$'>", "'pass!23$'");
var str2 = str.replace("<'pass!23$'>", "'pass!23$a'");

这是小提琴:http://jsfiddle.net/adUtw/

这真的让我很困惑!

【问题讨论】:

  • 因为$'在正则表达式中有特殊含义。
  • 这个MDN document 可以帮助你。

标签: javascript ios string replace automation


【解决方案1】:

如果您查看string.replace at MDN 的文档,您会注意到单独的$ 对于替换具有一些特殊含义。因此,如果要插入$,则需要使用$$。

您的替换语句将如下所示:

var str1 = str.replace("<'pass!23$'>", "'pass!23$$'");

您可以通过更新 Fiddle 来验证它是否正常工作。

【讨论】:

  • 这很有趣。如果第一个参数不是正则表达式,我认为 $ 不会有什么特别的意义。
  • 这真的很奇怪。因此,如果我执行 str.replace('$', '$$') 之类的操作,我可以避免这个问题吗?出现此问题的代码中不会使用任何正则表达式。
  • 糟糕,我的想法是对的,但实际上必须替换('$', '$$$$'),因为该字符串稍后会在脚本中进行评估。
【解决方案2】:

$ 出现在replace 的第二个参数中时为interpreted in a special way。

用于引用第一个参数中定义的正则表达式组:

'abc'.replace('(b)', 'XY$1Z') === 'aXYbZc'

而$' 被解释为portion of the string that follows the matched substring.

要在第二个参数中使用$,请通过说$$ 对其进行转义。

var str1 = str.replace("<'pass!23$'>", "'pass!23$$'");

【讨论】:

  • 所以也许奇怪的是,如果你有任意替换字符串,其中可能包含 $s,你必须用 '$$$$' 替换其中可能的 $s。例如 '$'.replace ('$', '$$$$') === '$$' 所以现在这是替换参数的有效值。棘手
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多