2012-02-15 3 views
0

Это работает:

var r="xS"; 
var regex = new RegExp(r); // Anchor at the end 
var s="axS"; 
s = s.replace(regex, "Z"); 
// Now, s is "aZ" 

Но это не

var r="x$"; 
var regex = new RegExp(r); // Anchor at the end 
var s="ax$"; 
s = s.replace(regex, "Z"); 
// Now, s is STILL "ax$". NOT "aZ". 

Это не работает независимо от того, где «$» находится в строке r - например, даже если это не в конце.

+0

Во втором бите кода r является «x $$». Почему две символы $ ведут себя иначе друг от друга? –

+0

@MichaelMyers - я удалил $ с конца регулярного выражения. Это была красная селедка от выхода кода (правый бок), но не повлияла на проблему. – DVK

+1

Почему downvote? – DVK

ответ

4

Если вы хотите найти в строке строку $, вам необходимо ее избежать. $ - специальный символ в регулярных выражениях, означающий «конец строки».

var r="x\$"; 
var regex = new RegExp(r + "$"); // Anchor at the end 
+0

Gotcha. По какой-то причине я подумал (ошибочно), что RegExp автоматически исчезнет. – DVK

+0

@ DVK: Он не может, как бы он знал, что вы пытаетесь сделать? И если бы это было так, как бы вы использовали специальные символы? :-P –

+1

Я сказал «за ** какую-то ** причину», а не за «здравомыслящую причину» :) – DVK

1

Во втором случае «ax $» - это буквальная строка, содержащая символ «$». Регулярное выражение (r) не содержит буквенного символа, но вместо этого содержит два якоря. Вам нужно избежать «$» в регулярном выражении, чтобы соответствовать буквальному значению.

var r = "x\$"; должен сделать трюк.

Смежные вопросы