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

at.*_*at. 5 javascript regex replace firebase firebase-realtime-database

我想用%20替换字符串中的句点以用于Firebase密钥.我可以一次做1个时间段:

string.replace('.', '%20')
Run Code Online (Sandbox Code Playgroud)

我甚至可以用/g正则表达式标志来做所有这些:

string.replace(/\./g, '%20')
Run Code Online (Sandbox Code Playgroud)

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

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

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

string.replace('.', '%20').replace('.', '%20').replace('.', '%20').replace('.', '%20')
Run Code Online (Sandbox Code Playgroud)

但我希望有更好的方法.

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

类型错误:对非目标的目标进行函数调用.

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

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

更新3:感谢Firebase的精彩支持,我发现string.replace他们的数据库规则中的函数已被替换为替换所有子串的版本,而不仅仅是一次出现.所以实际上string.replace('.', %2E')完美无缺!

Jer*_*son 10

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