2011-11-07 3 views
3

여기서 내가 뭘 잘못하고 있니?정규식에 대한 수량 한정 기호의 자바 스크립트 오류

자바 스크립트를 사용하여 문자열의 숫자를 다른 숫자로 바꾸려고합니다. 나는 그 안에 숫자 1을 여러 번 가지는 긴 문자열을 가지고있다. 나는 1이 2를 가진 경우를 제외하고 각 경우에 2를 대체 할 필요가있다. 나는 정규식을 사용하는 방법에 대한 구글 검색을 많이했다 (나는 완전히 정규식에 익숙하다). 그리고 나는 이것을 생각해 냈다.

string.replace(/(?<!\d)1(?!\d)/,2); 

는 기본적으로, 정규식 일치 (및 대체)가 다른 번호를 제외하고 아무것도에 둘러싸여 숫자 1의 모든 발생하고 싶다. 매치에 주변 문자가 포함되는 것을 원하지 않습니다. 숫자 1 만 사용하십시오.

내 방화 용 콘솔에서 계속 잘못된 수량 한정 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

7

이 비트는 (?<!\d)입니다. (?<이없고 (?:, (?=(?! 만 있습니다.

자바 스크립트를 살펴 숨김이없는,하지만 난 이런 식으로, 당신이이 경우에 해결 할 수 있다고 생각 : (

숫자 직전에 문자를 캡처
str = str.replace(/(^|\D)1(?!\d)/g, "$12") 

는, 다음을 다시 메아리 대체 문자열에 $1)와 새로운 내용 (2)이옵니다. 처음 근처에있는 ^은 문자열에서 첫 번째 문자가되는 숫자를 허용합니다.

Live example

하면 무너 뜨 :

(^|\D) Match either start-of-string, or a non-digit, and capture the result 
1  Match the digit 1... 
(?!\d) ...but only if it isn't followed by a digit

그리고 교체에

, $12하지 "캡처 그룹 (12)로 대체" "하지만, (그것은 나에게 모습입니다) 캡처 그룹 1과 그 다음에 숫자 2로 대체하십시오. "

+0

콜론이 음수 lookbehind에 대한 올바른 연산자입니까? 나는 부정적인 lookbehinds를하는 방법에 관한 [link] http://www.regular-expressions.info/lookaround.html을 읽고 있었고 그는 lt 문자를 사용한다고 말한다. 나는 당신이 말한 것과 같이 콜론으로 바꾸었고 더 이상 오류를 얻지 않지만 어떤 일치도 반환하지 않습니다. 나는 모든 사건을 맞추기 위해 마지막 슬래시 뒤에 g를 추가하려고 시도했지만 여전히 작동하지 않습니다. 나는 여기서 단서가 없다. – codescribblr

+0

@Jonathan : 아니요, JavaScript에는 룩백 (look-behind) 기능이 없습니다 (미리보기, 양수 및 음수 모두). '? :'는 캡쳐하지 않는 블록을 나타냅니다. –

+0

위대한 설명! 정말 고마워. 여기 당신이 내게 준 것에 기초하여 끝이났습니다 :'var i = 1; \t $ ("#의 addshipmentobjecbutton"() 함수() { \t \t 경우 (ⅰ <= 5) { \t \t \t VAR old_object = $ ('#의 shipmentobject') HTML()을 클릭;.. \t \t \t을 var new_object = old_object.replace (/ (^! \ D) \ d (?! \ d)/g, "$"+ i + 2), \t \t \t $ ('# shipmentobjects').append ("

"+ new_object + "
"); \t \t \ti ++; \t \t}) – codescribblr