Почему $ в строке замены, переданной в функцию replace (), иногда прерывается? - PullRequest
3 голосов
/ 10 марта 2010

У меня есть переменная, которую я использую для создания вызова функции JavaScript, и JavaScript .replace(), чтобы окружить строку текста событием span и onclick. Часть .replace() выглядит следующим образом:

code.replace(/(\d{4}\s+)?(LOCAL|PARAMETER|GLOBAL)\s+USING\s+([\S]+)/g, 
   "<span class=\"natprint_popup\" onclick=\"getNaturalCode('" 
     + lib 
     + "','$3','@#test_prod_qual|',0,'Y'); return false;\">$&</span>");

Единственная проблема состоит в том, что переменная lib содержит $ в конце некоторое время; например, lib == DPDRI$. Это приводит к разрыву JavaScript на моей странице, и я получаю вывод, который прерывается в конце lib и отображает остальные параметры функции Javascript в виде простого текста:

,'DPDPDRNO','TEST',0,'Y'); return false;">

Я безрезультатно искал ответы в течение нескольких дней. Я попытался сделать lib.replace(/\$/g, "\\$"); и \$ успешно пробивается в переменную, но это все еще нарушает мой код. Кажется, что движок JavaScript пытается интерпретировать $ в конце lib как захваченное совпадение, и это заставляет его взорваться. У кого-нибудь есть идеи, как заставить это работать?

1 Ответ

2 голосов
/ 10 марта 2010

См. Указание строки в качестве раздела параметров документации replace() на MDC:

Строка замены может содержать следующие специальные шаблоны замены:

<b>Pattern    Inserts</b>
$$    Inserts a "$".
...
$'    Inserts the portion of the string that follows the matched substring.
...

Обратите внимание, что поскольку содержимое вашей переменной вставляется в виде параметра, заключенного в одинарные кавычки, в функцию, которую вы вызываете из onclick, за всегда всегда будет следовать ', поэтому заканчивается символом $, вы случайно создали шаблон замены:

 ... onclick=\"getNaturalCode('DPDRI<b>$'</b> ...

Теперь, вы могли бы просто изменить то, как вы указали этот конкретный параметр. Но, чтобы быть в безопасности, вы должны действительно избегать символа $:

 + lib.replace(/\$/g, "$$$$")

Вышеуказанная модификация преобразует «DPDRI $» в «DPDRI $$» до его вставки в строку замены, что позволяет окончательной замене содержать литерал $.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...