2016-08-10 5 views
0

나는 자바 스크립트에서 regex에 초보자이고 자바 스크립트에서 regex를 사용하는 데 막혔다.RegExp를 javascript에서 사용하는 방법?

내가이 개 시나리오에는

1) 나는 aaa/+/bbb/+ 같은 문자열을 가지고, 난 정규 표현식을 사용하여 문자열 aaa/1/bbb/hello123aaa/1/bbb/이 문자열을 일치시킬 모두가 true를 반환해야합니다. 그때 AAA/1/BBB 내가 문자열 AAA가있는 경우 다음이 false

2)를 제공해야합니다/#을 전달하는 경우는 위의 모든 문자열을 일치 하나가 나를 도울 수

사실 returmn해야합니까?

+0

당신은'+'와'#'이다 어떤 의미에 대해보다 구체적인 될 수 있을까? '+'는 하나 이상의 숫자와 문자와 일치하는 것으로 보이지만 명확하지 않습니다. – 4castle

+0

'2) 문자열 aaa/#가 있으면 위의 모든 문자열과 일치해야하고 참이어야합니다. - 아니야 안됩니다. –

+0

@JaromandaX 설명 할 수 있습니까? 그들은 단순히 사용자 정의 와일드 카드 문자를 정의합니다. 나는 '#'이 그 의미를 갖는 큰소리로 나오면 안된다는 것을 보지 못했다. – 4castle

답변

0

^aaa\/[0-9]+\/bbb\/[\w\d]*$는 다음 문자열과 일치합니다 정규 표현식 :

aaa/1/bbb/hello123 
aaa/1/bbb/ 

이러한 문자열이 일치하지 않습니다

aaa/1/bbb 

나는 당신의 두 번째 시나리오에 대한 불분명 오전 - 당신이 말하는을 정규식해야 문자열 aaa/#과도 일치합니까? 정규식에서 +[^/]*로 번역 할

var re = /^aaa\/[0-9]+\/bbb\/[\w\d]*$/; 
var matches = re.test("aaa/1/bbb/"); 
if (matches) { console.log("it matches!"); } 
+1

're.test (str)'을 사용하여 일치하는 항목이 있는지 확인하십시오. – 4castle

+0

고마워요 4castle - 그 방법을 잊어 버렸습니다. –

1

하고 #.*로 번역 것 :

당신과 같이 자바 스크립트에서 정규식을 사용할 수 있습니다.

다음 단계는 입력 문자열의 특수 문자를 이스케이프 처리하는 것입니다. This regex에 그 목적이 있습니다. +은 특수 문자이므로 수동으로 이스케이프 처리해야합니다.

RegExp.escape= function(s) { 
 
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
 
}; 
 

 
function matchesPattern(pattern, input) { 
 
    pattern = RegExp.escape(pattern);   // escape special characters 
 
    pattern = pattern.replace(/\\\+/g, "[^/]*"); // replace '\+' 
 
    pattern = pattern.replace(/#/g, ".*");  // replace '#' 
 
    pattern = new RegExp("^" + pattern + "$"); // construct regex 
 
    return pattern.test(input);     // test input 
 
} 
 

 
console.log(matchesPattern("aaa/+/bbb/+", "aaa/1/bbb/hello123")); 
 
console.log(matchesPattern("aaa/+/bbb/+", "aaa/1/bbb/")); 
 
console.log(matchesPattern("aaa/+/bbb/+", "aaa/1/bbb")); 
 

 
console.log(matchesPattern("aaa/#", "aaa/1/bbb/hello123")); 
 
console.log(matchesPattern("aaa/#", "aaa/1/bbb/")); 
 
console.log(matchesPattern("aaa/#", "aaa/1/bbb"));

관련 문제