2012-06-12 3 views
0

사용자가 언제든지 편집 할 수있는 문자열과 문자열에서 수행되는 정규식을 XML에 추가 한 후 저장하지만 추가 할 수 있습니다. '$ 1'을 문자열에 추가합니다. 나는 단지 '$ 1'텍스트를 저장하기를 원하지만 $ 1이 들어있는 같은 문자열에 대해 정규 표현식을 수행해야한다. 매번 $ 1을 정규 표현식의 문자로 바꾼다.

이 문자열에서 $ 1을 (를) 어떻게 바꾸고 대체합니까? 무슨 일이 일어나고 있는지

예 :

string1 = '<item id="1">i have $100</item>' 

regexp = new RegExp('<item id="1"([^<]|<[^\/]|<\/[^i]|<\/i[^t]|<\/it[^e]|<\/ite[^m]|<\/item[^>])*<\/item>'); 

data = '<data><item id="1">i have no money</item><item id="2">i have no money</item></data>' 

data = data.replace(regexp, string1); 

<data><item id="1">i have >00</item><item id="2">i have no money</item></data> 
+1

는 여기 다 필요 해독 정말 힘든. 어쩌면 조금 더 잘 어울릴 수 있니? –

+0

아, 알겠습니다. @ amnotiam의 대답은 그것을해야 –

답변

3

당신이 정규식에서 캡처 그룹이있는 경우에만 발생한다 결과.

그룹을 캡처하지 않으려면 ?:을 그룹 시작 부분에 넣으십시오.

/foo(?:bar)/ 
+0

, 고마워요. 내가 잘못 생각한 것의 더 좋은 예를 쓰는 방법을보고 있었기 때문에 당신은 대답했다. 그리고 분명히 나는 ​​3 번 무효화되었다. ... awesome ... – WPAflight

0

$에서 탈출 할 수 있습니다. 예 :

var replacement = '<item id="1">i have \\$100</item>'; 

유용한 당신이 그룹을 캡처하고 $를 작성해야합니다 때.

+0

그러나 나는 내용을 제어 할 수없고 검색해야한다. 그 슬래시를 추가하는 $ 1에 대한 문자열을 통해 다음 다시 한번 그들 모두를 찾을 수있는 정규식을 사용해야 할 것입니다 그리고 나는 다시 사각형 하나 될 것입니다. 어쨌든 고맙습니다. – WPAflight

1

당신은 아마도 거기에 $N 년대가있을 수 있습니다 귀하의 replace() 전화에 넣어하고자하는 변수 문자열이있는 경우, $$$을 대체하여 역 참조로 취급되는 것을 $N을 방지 할 수 있습니다. 외관상으로는, JS regex에있는 다른 특수 문자와 달리 $ 문자는 \으로 이스케이프 할 수 없습니다. 먼저 $으로 이스케이프해야합니다 (그림 참조). 당신의 예에서

, 당신은 문제를 해결하기 위해 다음을 수행 할 수 :

data = data.replace(regexp, string1.replace('$', '$$$')); 

이는 역 참조로 취급되는 것을 방지 string1$$에 어떤 $ 년대를 설정해야합니다.

(참고 : 나는이 작은 덩어리 here 발견)

+0

'$'는 다른'$'로 이스케이프 처리해야한다는 것을 지적하는데 매우 유용합니다. – Jonah