여기에서 대부분의 표현식은 단일 특정 사용 사례를 해결합니다.
괜찮습니다.하지만 "항상 작동"방식을 선호합니다.
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이 제공합니다.