2013-05-24 2 views
1

Javascript RegExp에 정규 표현식 자체 내에서 대소 문자를 구분하지 않을지 여부를 알고 싶습니다. 전체 정규 표현식에 대한 수식어를 설정할 수 있다는 것을 알고 있지만, 내가 말하는 것은 아닙니다.Javascript RegExp는 부분 대소 문자 구분을 할 수 있습니까?

예를 들어, 내 검색 문자열은
일 수 있습니다.

대소 문자를 구분하지 않는 "텍스트 검색"부분을 찾고 "TOP SECRET"의 대소 문자를 구분합니다. (첫 번째 섹션의 경우는 문제가되지 않습니다)
teXT To seArcH Top Secret

을하지만이 일치합니다 :

따라서,이 (때문에 일급 비밀에 대한 대소 문자 구분의) 일치하지 않을
text to search TOP SECRET

에서 Perl, 검색 문자열 내에 you can do this. Javascript의 정규 표현 엔진이 이와 같은 것을 지원합니까?

+0

작은 테스트가 뒤 따르는 둔감한 정규식 검색으로 수행 할 수 있습니다. 또는 당신을위한 정규 표현식을 만들기위한 코드를 작성하십시오. –

+1

아니요. JavaScript에는'(? i : ...)'와 같은 범위 한정자가 없습니다. TOP SECRET /', 또는 varm =/text TOP SECRET $/i.match (2)로 테스트를해라. ; m = m && m [0] .match (/ TOP_SECRET $ /)'. –

답변

4

당신은 대소 문자를 구분 "긴 형식"에서 정규 표현식을 작성할 수 있습니다

/[tT][eE][xX][tT] [tT][oO] [sS][eE][aA][rR][cC][hH] TOP SECRET/ 
    .test('text to search TOP SECRET'); 
// true 

다른 방법은, 또한 엄격한 하나

function test(str) { 
    var m = str.match(/text to search (TOP SECRET)/i); 
    return (m || false) && /TOP SECRET$/.test(m[1]); 
} 

test('text to search TOP SECRET'); // true 
test('text to search ToP SECRET'); // false 

뒤에 문자를 구분 한 두 개의 정규 표현식이다 , test 위의 함수는이 특정 경우에 최적화 될 수 있습니다 (TOP SECRET 부분은 사실상 정확히 sam을 갖는 문자열 리터럴입니다) 전자 양식), 당신이

(m || false) && 'TOP SECRET' === m[1]; 
+1

편집을 보았습니다 ~ = 내 대답과 같아. (+1) – svidgen

0

2 개의 정규식을 사용하지 않는 이유는 무엇입니까?

var str = "teXT To seArcH TOP SECRET"; 
if (/text to search/i.test(str) && /TOP SECRET/.test(str)) { 
    console.log('match!'); 
} 

내가 대신 정규식의 당신은 코드 로직과 결합하는 소수를 만들 수있는 모든 경우를 포함하는 하나의 매우 복잡한 정규 표현식을 만들 수있는 좋은 이유가 거의 없다 생각합니다. 오히려 복잡한 정규 표현식이 실제로하는 일을 생각하는 것이 상당히 어려울 수 있기 때문에 유지 관리 관점에서 Regex의 작은 바이트 크기를 갖는 것이 좋습니다.

+0

텍스트의 순서는 보존되지 않고'/ (? i : text to SEARCH) char /'를 검색하고 문자열은'tExt to searchar '가됩니다. – nhahtdh

3

은 무엇 당신이 할 수있는 것은 다음과 같은 정규식을 구축 할 것입니다 할 수있는 즉, 그것을 확인하기 위해 두 번째 전체 정규식을 테스트를 필요로하지 않습니다

var str = "teXT To seArch"; 
var r = new RegExp(
    str.split('').map(function(c){return '['+c.toLowerCase()+c.toUpperCase()+']'}).join('') 
    + ' TOP SECRET' 
); 
+0

+ 1-ing 이것은 원하는 테스트 유형에 대해 _RegExp_를 프로그래밍 방식으로 만드는 방식으로 가장 유용하기 때문에이 옵션을 사용하십시오. –

2

돈 그렇게 생각하지 않아. 나는이 일을 건의 할 것입니다 :

var m; 
var str = "teXT To seArcH TOP SECRET"; 
if ((m = str.match(/text to search (top secret)/i)) && m[1].match(/TOP SECRET/)) { 
    // matched. 
} 
2

this reference page에 따르면, 자바 스크립트가 지원

없음 모드 수정은 일반 표현 내에서 일치하는 옵션을 설정할 수 없습니다.

따라서 대답은 아니오입니다. 정규식 내에서 대/소문자 구분을 켜거나 끌 수 없습니다.

관련 문제