누군가 ECMAScript 표준에 따라 문자 클래스에서 10 진수 이스케이프의 의미를 설명 할 수 있습니까?일반 표현식의 문자 클래스에서 10 진수 이스케이프
예를 들어, 다음 패턴은 무엇을 의미합니까? 구문 오류가 발생해야합니까? 다음과 같이
-
생산 ClassEscape :: DecimalEscape가 평가 : 여기
코어 사양에서 관련 부분이다[\11]
- 가 DecimalEscape 평가 EscapeValue를 얻는다. E.
- E가 문자가 아닌 경우 SyntaxError 예외를 발생시킵니다.
- ch가 E의 문자가되도록하십시오.
- 문자 ch가 포함 된 단일 요소 CharSet을 반환합니다.
- 내가 DecimalIntegerLiteral의 MV하자 :
-
다음과 같이 DecimalEscape :: DecimalIntegerLiteral는 평가 생산
- i가 0이면 U + 0000 (NULL) 문자로 구성된 EscapeValue를 반환합니다.
- 정수 i로 구성된 EscapeValue를 반환합니다.
- NOTE
\이어서 이스케이프 시퀀스는 역 참조로 간주되어, 그 첫 번째 숫자 0이 아닌 진수 N, 다음 경우. n이 전체 정규 표현식에서 왼쪽 캡처 괄호의 총 수보다 큰 경우 오류가 발생합니다. \ 0은 문자를 나타내며 십진수가 올 수 없습니다.
"DecimalIntegerLiteral의 MV"의 정의는 11.8.3에 있습니다.
ClassEscape
의 언급도 있습니다
:
-
ClassEscape (21.2.2.19) 다음의 추가 평가 규칙을 포함한다 : 다음 ...이 확인 된 경우에만
제조 ClassEscape :: DecimalEscapebut는 :
- 하려면, escapeValue E.
- 어설 수득 DecimalEscape 평가 : E가 문자이다.
- ch가 E의 문자가되도록하십시오.
- 문자 ch가 포함 된 단일 요소 CharSet을 반환합니다.
내 주요 문제는 내가 그렇지 않으면 정수를 반환, 그것은 0
가 (그때는 U+0000
을 반환) 인식하는지 규칙 DecimalEscape
는 문자를 생성하는 느낌,하지만 난을 얻을 수 있다는 것입니다 Firefox에서 Javascript 콘솔로 테스트 할 때 구문 오류가 발생합니다.
// This is the only one I understand:
/[\0]/.test("\x00") // true
// Now it gets strange
/[\1]/.test("\x01") // true
/[\2]/.test("\x02") // true
/[\3]/.test("\x03") // true
/[\4]/.test("\x04") // true
/[\5]/.test("\x05") // true
/[\6]/.test("\x06") // true
/[\7]/.test("\x07") // true
/[\8]/.test("\x08") // false
/[\9]/.test("\x09") // false
/[\10]/.test("\x0a") // false
/[\11]/.test("\x0b") // false
// This is not interpreted as `\1` and `0`
/[\10]/.test("0") // false
// Also, it's not a backreference
/((((((((((a))))))))))[\10]/.test("aa") // false
왜 7까지 true
을 반환하지 다음 false
:
여기에 내가 발견 된 일부 결과는? 이것은 8 진수와 관련이 없어야합니다. 나는 몇 가지 설명을 고맙게 생각한다.
Firefox와 Node.js는 _decimalEscape_를 8 진수로 해석합니다./(\ u00ff ")'/ [\ 400] /. test ("\ u0100 ")'는 false입니다. 잠깐 관측 일 뿐이므로이 동작을 명시한 신뢰할 수있는 출처에 대한 링크를 제공 할 수 있습니까? – Demurgos
발견 : 브라우저 추가 (B.1.2)의 일부로, 답변을 편집했습니다. – Demurgos