2012-02-02 3 views
0

URL의 특정 텍스트를 일치 시키려면 자바 스크립트에서 정규 표현식을 사용해야합니다. 여기 URL에 텍스트를 캡처하는 자바 스크립트 정규식 사용

은 예입니다

"qty1 = 0 & qty2 = 0 & qty3 = 0 &"는 '='후와 앞에 오는

내가 텍스트 (번호)를 일치시킬 문자열에 'qty'라는 단어가 나타날 때마다 '&'이 표시됩니다. 텍스트 (숫자)는 URL이 생성 될 때마다 변경 될 수 있으므로 새로운 텍스트 (숫자)가 무엇이든지간에 일치 시키려합니다.

이 문제를 해결하기 위해 어떤 정규 표현식을 사용할 수 있습니까?

도움이 될 것입니다.

+0

조금 명확히 할 필요가 있습니다. 경기는 잘못된 단어였습니다. 사과드립니다. "qty"가 텍스트 문자열에 나타날 때마다 정규 표현식을 사용하여 "="과 "&"사이에 나오는 텍스트 (숫자)를 찾아야합니다. 그런 다음이 텍스트 (숫자)를 변수에 저장하여 조건문을 실행할 수 있도록해야합니다. – gijoe426

답변

1
var queryStr = "qty1=0&qty2=0&qty3=0"; 
var regex = /qty(\d+)=(\d+)/g; 
var match = regex.exec(queryStr); 
while(match != null){ 
    var numBeforeEquals = match[1]; 
    var numAfterEquals = match[2]; 
    // do your comparison, for example, if it's > 0: 
    if(numAfterEquals > 0){ 
    // do something 
    } 
    match = regex.exec(queryStr); 
} 

정규식 끝 부분에주의하십시오. 일부 자바 스크립트 구현에서는 무한 루프로 끝날 것입니다.

0

다음은 대안 URL입니다. 표현의 두 부분을 두 번 사용하고 있기 때문에 대안이라고 부릅니다. 최적화 할 수 있다고 생각합니다.

var breakdown = "http://local/?wtf=omg&qty12=a&qty2=b&qty3=4&test=5".match(/qty[0-9]{0,9999}(.*?)&/ig); 
for(var i in breakdown) { 
    var v = breakdown[i].match(/qty[0-9]{0,9999}\=(.*?)&/i)[1]; 
    if(v == 4 || v == "a") { 
     alert("Found '"+v+"'!") 
    } 
} 

작업 예 : http://jsfiddle.net/MattLo/FxDyg/

+0

이것은 거의 정확하게 필요한 것입니다. "qty"및 "="다음에 나오는 숫자와 일치하도록 정규 표현식을 변경하는 방법이 있습니까? 지금은 숫자 0-9 만 확인합니다. 또한 각 값을 개별적으로 캡처 할 수있는 방법이 있습니까? 그래서 별도의 코드 블록을 실행하기 위해 각 값에 대해 조건부 if 문을 실행할 수 있습니까? – gijoe426

+0

예, 예, 최대 9999 개를 수락하도록 코드 조각을 업데이트했으며 조건문에 대한 영역을 –

0

스크립트가 위의 예를 들어 9보다 번호 greather 작동하지 않습니다 수 있도록 \d+ 누락이

var regex = /qty[\d]+=(\d+)/g, 
    text = "qty1=5&qty2=7&qty3=8&"; 

while(match = regex.exec(text)) { 
    console.log(match[1]); 
} 

@ggreiner 시도 10, 11

+0

"qty"와 "=", "="및 "&"사이에 0-9 사이의 숫자로 제공합니다 내가 말할 수있는 한). 그러나 정규 표현식은 "0", "0", "0"처럼 "="다음의 숫자 대신 "qty1 = 0", "qty2 = 0", "qty3 = 0" – gijoe426

+0

당신은 내 점수'match [1]'을 놓쳤습니다. 이것은 당신이 원하는 것입니다 (그 번호와 일치합니다). – Rezigned