여기에서 대부분의 표현식은 단일 특정 사용 사례를 해결합니다.
괜찮습니다.하지만 "항상 작동"방식을 선호합니다.
function regExpEscape(literal_string) {
return literal_string.replace(/[-[\]{}()*+!<=:?.\/\\^$|#\s,]/g, '\\$&');
}
정규 표현식에서 다음 용도로 리터럴 문자열을 "완전히 이스케이프"합니다.
- 정규식에 삽입 예 :
new RegExp(regExpEscape(str))
- 문자 클래스에 삽입 예 :
new RegExp('[' + regExpEscape(str) + ']')
- 정수 카운트 지정자에 삽입 예 :
new RegExp('x{1,' + regExpEscape(str) + '}')
- 비 JavaScript 정규식 엔진에서 실행
다루는 특수 문자 :
-: 문자 클래스에서 문자 범위를 만듭니다.
[/ ]: 문자 클래스를 시작 / 종료합니다.
{/ }: 분자 지정자를 시작 / 종료합니다.
(/ ): 그룹을 시작 / 종료합니다.
*/ +/ ?: 반복 유형을 지정합니다.
.: 모든 문자와 일치합니다.
\: 문자를 이스케이프하고 엔터티를 시작합니다.
^: 일치 영역의 시작을 지정하고 문자 클래스에서 일치를 무효화합니다.
$: 일치 영역의 끝을 지정합니다.
|: 교대를 지정합니다.
#: 빈 공간 모드에서 주석을 지정합니다.
\s: 여유 공간 모드에서는 무시됩니다.
,: 분자 지정자에서 값을 구분합니다.
/: 표현식을 시작하거나 종료합니다.
:: 특수 그룹 유형과 펄 스타일 문자 클래스의 일부를 완성합니다.
!: 폭이 0 인 그룹을 무효화합니다.
</ =: 폭이 0 인 그룹 사양의 일부.
노트:
/정규 표현의 풍미에 꼭 필요한 것은 아닙니다. 그러나 누군가 (shudder) 가 할 경우를 대비하여 보호합니다 eval("/" + pattern + "/");.
, 문자열이 숫자 지정자에서 정수인 경우 자동 컴파일 오류 대신 RegExp 컴파일 오류가 올바르게 발생합니다.
#그리고 \s자바 스크립트에서 탈출 할 필요가 있지만, 많은 다른 맛을하지 않습니다. 정규식이 나중에 다른 프로그램으로 전달 될 경우에는 여기서 이스케이프됩니다.
JavaScript 정규식 엔진 기능에 추가 될 가능성에 대비하여 정규 표현식을 미래에 대비해야 할 경우 더 편집증을 사용하는 것이 좋습니다.
function regExpEscapeFuture(literal_string) {
return literal_string.replace(/[^A-Za-z0-9_]/g, '\\$&');
}
이 함수는 향후 정규 표현식 플레이버에서 구문에 사용되지 않도록 명시 적으로 보장 된 문자를 제외한 모든 문자를 이스케이프합니다.
진정으로 위생을 유지하려면 다음과 같은 경우를 고려하십시오.
var s = '';
new RegExp('(choice1|choice2|' + regExpEscape(s) + ')');
이것은 해야 하지 다른 맛을 자바 스크립트에서 잘 컴파일,하지만 것입니다. 다른 플레이버로 전달하려는 경우 다음과 같이 null 경우를 s === ''독립적으로 확인해야합니다.
var s = '';
new RegExp('(choice1|choice2' + (s ? '|' + regExpEscape(s) : '') + ')');
RegExp.escape현재 진행중인 훌륭한 사람들을 업데이트하고 싶었고 귀중한 의견을 가지고 있다고 생각하는 사람이라면 누구나 참여할 수 있습니다. core-js 및 기타 polyfill이 제공합니다.