2012-10-31 3 views
2

XRegExp의 'x'플래그를 사용하면 리터럴 '#'을 검색에 추가하는 방법이 명확하지 않습니다.XRegExp에서 해시 ("#")를 찾아

The documentation은 조명을 제공하지 않습니다. 예를 들어

는 :

> XRegExp("the # hey",'x').toString() 
'/the(?:)/' 

이 예상대로 - '#'이후 모든 코멘트를 무시합니다.

명백한 솔루션, 일반적으로 탈출 수정, 예를 들어 \\ 선도 (내 제한된 경험을 바탕으로) 할 것 #을 무시하고 그 라인에 대한 내용을 다음하지 :

> XRegExp("the \# hey",'x').toString() 
'/the(?:)/' 

또는

> XRegExp("the \\# hey",'x').toString() 
'/the(?:)\\#(?:)hey/' 

불행히도 예상대로 작동하지 않으며, 명백한 이유 때문에 후자는 다음을 산출합니다.

> XRegExp("the \\# hey",'x').xtest("the # hey") 
false 

심지어 우리가 입력 데이터를 수정해야 더 치명적인 경우 :

> XRegExp("the \\# hey",'x').xtest("the \\# hey") 
false 

대안 정식 이스케이프는 이중 해시 (##)를 사용하는 것이지만, 그 중 하나가 작동하지 않습니다

> XRegExp("the ## hey",'x').toString() 
'/the(?:)/' 

그러면 'x'플래그를 사용하는 XRegExp 표현식에 # 리터럴을 어떻게 추가 할 수 있습니까? 나는 혼란 스럽다.

답변

2

답변을 찾았으므로 공백을 \\s+으로 대체해야하므로 위 테스트를 수행 할 수 없다는 점에 유의하십시오. 대답은 [#]과 같이 사용하는 것으로 보입니다. 예 : [#] 플래그 x에 대한

> XRegExp("the\\s+[#]\\s+hey",'x').xtest("the # hey") 
true 
0

문서 는 http://xregexp.com/flags/#extended이다.

x의 효과 중 하나는 정규식 패턴의 공백이 무시된다는 것입니다. 정규식의 문자 그대로 공백을 \s (문자열 이스케이프 규칙으로 인해 문자열 리터럴에 포함 된 경우 \\s)으로 바꿀 수 있음을 알았습니다. 하지만 이것이 바로 공백 문자와 일치하는 공백 문자와 일치하는 패턴을 변경한다는 점에 유의하십시오. 또는 공백을 벗어날 수 있습니다 : XRegExp('the\\ \\# \\ hey', 'x'). 또는 [#]과 같은 방법으로 [ ]을 사용할 수 있습니다. 또는 XRegExp('the' + XRegExp.escape(' # ') + 'hey', 'x')과 같은 작업을 수행 할 수 있습니다. 또는 문자 그대로 공백이있는 경우 x 플래그를 사용하지 말고 패턴에 # 문자를 사용하십시오.