2016-12-12 13 views
5

Chcę zastąpić kropki w ciągu znaków za pomocą% 20 dla celów klucza Firebase. mogę zrobić 1 okres w czasie z:Jak zamienić wszystkie kropki w łańcuchu w JavaScript bez/g?

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

mogę zrobić nawet wszystkie z nich z flagą /g regex:

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

Ale Firebase reguły wyskakuje mi błąd:

Error saving rules - Line 5: regular expressions do not support flags other than i

Potrzebuję więc wyrażenia, które zastępuje wszystkie okresy bez użycia /g. Mogłem tylko łańcuch .replace('.', '%20') kilka razy:

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

Ale mam nadzieję, że to lepszy sposób.

UPDATE: Próbowałem string.split('.').join('%20'), ale Firebase wyrzuca błąd:

Type error: Function call on target that is not a function.

myślę, że wyjął funkcję split w swoich przepisach parsera JSON.

UPDATE 2: Próbowałem również (function() {var s = auth.token.email; while (s.indexOf('.') != -1) { s = s.replace('.', '%20') } return s})(). Firebase skarżyło się, że definicje funkcji nie są dozwolone w ich regułach bazy danych.

UPDATE 3: Dzięki wspaniałej wsparcia Firebase jest, dowiedziałem się, że funkcja w swoich przepisach bazodanowych string.replace został zastąpiony z wersją, która zastępuje wszystkie wystąpienia podciągu, a nie tylko pojedyncze wystąpienie. Tak naprawdę string.replace('.', %2E') działa idealnie!

+0

Jedyne odniesienie, które znalazłem, to [sprawa Githuba] (https://github.com/firebase/bolt/issues/176) ... – Xufox

+0

Tak @Xufox to problem, z którym mam do czynienia –

+0

Jeśli planujesz używać adresów e-mail jako kluczy, istnieje wiele lepszych opcji strukturyzacji danych, aby można było całkowicie uniknąć tego bałaganu. Tylko mówię'. – Jay

Odpowiedz

9

Można po prostu podzielić i dołączyć go ponownie string.split('.').join('%20')

+1

Plus1 do zapisania mi konieczności wpisania dokładnie tego samego: D – Archer

+1

To jest eleganckie! Moją pierwszą myślą była pętla 'while' z' (/ \ ./) .testem (ciągiem) 'lub czymś podobnym do warunku. – Xufox

+0

Właśnie opublikowałem aktualizację, której próbowałem, ale Firebase daje mi błąd. Jest to jednak dobra odpowiedź na moje pytanie. –

0

Od Firebase narzeka kiedy również spróbować oczywiście lepszą odpowiedź Split następnie przyłączyć, spróbuj tego ...

var s = "this.is.a.string.value"; 
 

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

 
console.log(s);

+0

Mogę spróbować owijać to jako wyrażenie lub IIFE –

+0

Tak, znasz kontekst, abyś mógł zdecydować, jak najlepiej go użyć. Jeśli możesz prototypować funkcje w Firebase, to może to być rozwiązanie, jeśli potrzebujesz go więcej niż raz. – Archer

+0

Niestety Firebase podaje błąd, że definicje funkcji nie są dozwolone w regułach bazy danych :( –

Powiązane problemy