如何在没有/ g的情况下用JavaScript替换字符串中的所有句点?

时间:2016-12-12 19:07:30

标签: javascript regex firebase replace firebase-realtime-database

我希望将字符串中的句点替换为%20,以用于Firebase密钥。我可以一次做1个句号:

string.replace('.', '%20')

我甚至可以使用/g正则表达式标记执行所有这些操作:

string.replace(/\./g, '%20')

但Firebase规则给了我一个错误:

  

保存规则时出错 - 第5行:正则表达式不支持i

以外的标志

所以我需要一个表达式来替换所有句点而不使用/g。我可以链接.replace('.', '%20')一堆:

string.replace('.', '%20').replace('.', '%20').replace('.', '%20').replace('.', '%20')

但我希望有更好的方法。

更新:我曾尝试string.split('.').join('%20'),但Firebase会抛出错误:

  

类型错误:对不是函数的目标执行函数调用。

我猜他们在他们的JSON规则解析器中取出了split函数。

更新2 :我也尝试了(function() {var s = auth.token.email; while (s.indexOf('.') != -1) { s = s.replace('.', '%20') } return s})()。 Firebase抱怨说,他们的数据库规则中不允许使用函数定义。

更新3 :感谢Firebase的精彩支持,我发现其数据库规则中的string.replace函数已被替换,其版本替换< strong>所有子串的出现,而不仅仅是一次出现。实际上string.replace('.', %2E')实际上非常有用!

2 个答案:

答案 0 :(得分:10)

您可以再次拆分并加入string.split('.').join('%20')

答案 1 :(得分:1)

由于Firebase在你尝试明显更好的分裂答案时抱怨,然后加入,试试这个......

&#13;
&#13;
var s = "this.is.a.string.value";

while (s.indexOf(".") != -1) {
  s = s.replace(".", "%20");
}

console.log(s);
&#13;
&#13;
&#13;