2015-08-13 9 views
5

Chcę zastąpić oświadczenie o następującej treści:

"(?)".replace("?", "$'") 

Moje oczekiwanie jest:

($') 

Ale wynik jest faktycznie:

()) 

Jak mogę poprawić mój kod?

Odpowiedz

6

Trzeba użyć $$' jeśli chcesz zastąpić do $' ponieważ $' jest specjalny wzór zastępczą, która

Powoduje wstawienie fragmentu ciągu następującego po dopasowanym podciągu.

Wszystkie dostępne wzory są:

$$ wstawia "$".

$ &: Wstawia dopasowany podciąg.

$ `: wstawia część ciągu poprzedzającą dopasowany podciąg.

$ ': Wstawia część ciągu podążającego za dopasowanym podciąganiem.

$ n lub $ nn: gdzie n lub nn są cyframi dziesiętnymi, wstawiany jest n-rzędowy łańcuch podrzędny pod warunkiem, że pierwszym argumentem był obiekt RegExp.

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/replace

+0

Jeśli zamiennik jest zmienną, nie wiem, czy istnieje jakikolwiek znak $. Czy powinienem wymienić wszystkie $ $ $$ za każdy zamiennik? – vietean

+0

Jeśli chcesz użyć znaku '$' zamiast używać go jako znaku specjalnego, musisz użyć '$$' –

+1

@vietean Nie jestem pewien, czy dobrze zrozumiałem twoje pytanie, ale gdy chcesz coś zastąpić _by_ znakiem dolara, używaj '$$' za każdym razem jako drugiego argumentu funkcji 'replace'. Tylko '$$' bezpiecznie tworzy pojedynczy '$ 'w ten sposób. – Xufox

4

Trzeba

"(?)".replace("?", "$$'") 

$”jest specjalny wzór zastępcza (nserts część napisu, która poprzedza dopasowany podciąg.) I musi być ocalałem przy użyciu $.


Jak to zrobić bez sekwencji ucieczki

Jeśli nie chcesz zastąpić wszystkie swoje $ w ciągu zastępowania, można również zrobić coś

"(?)".replace("?", function() { return "$'" }) 

tj. za pomocą funkcji (która zwraca ciąg zastępczy - brak konieczności ucieczki) jako drugiego parametru.

Zobacz https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter

wynik (wartości zwracanej) funkcja będzie stosowany jako zamiennik ciąg. . (Uwaga: wyżej wymienione specjalny wzory zamienne nie zastosowanie w tym przypadku)

+0

'.replace ('poprzedza', 'następuje')'. – Xufox

+0

Jeśli zamiennik jest zmienną, nie wiem, czy istnieje jakikolwiek znak $. Czy powinienem wymienić wszystkie $ $ $$ za każdy zamiennik? – vietean

+0

Tak, powinieneś dokładnie to, czego próbujesz. Może być coś łatwiejszego. – potatopeelings

Powiązane problemy