我希望将字符串中的句点替换为%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')
实际上非常有用!
答案 0 :(得分:10)
您可以再次拆分并加入string.split('.').join('%20')
答案 1 :(得分:1)
由于Firebase在你尝试明显更好的分裂答案时抱怨,然后加入,试试这个......
var s = "this.is.a.string.value";
while (s.indexOf(".") != -1) {
s = s.replace(".", "%20");
}
console.log(s);
&#13;