Development Tip

Javascript + Regex = 반복 할 사항 없음 오류?

yourdevel 2020. 12. 8. 20:07
반응형

Javascript + Regex = 반복 할 사항 없음 오류?


저는 Regex를 처음 사용하고 있으며 새로운 프로젝트 중 하나에 작업하여 그것을 배울 수 있는지 확인하고 내 기술 목록에 추가하려고합니다. 그러나 여기에 장애물이 있습니다.

다음 .search과 같이 함수를 사용하여 사용자 입력에 잘못된 문자가 있는지 확인하려고합니다 .

if (name.search("[\[\]\?\*\+\|\{\}\\\(\)\@\.\n\r]") != -1) {
    ...
}

그러나이 줄에 포함 된 함수를 실행하려고하면 해당 특정 줄에 대해 다음 오류가 발생합니다.

Uncaught SyntaxError: Invalid regular expression: /[[]?*+|{}\()@.

]/: Nothing to repeat

내 코드에 무엇이 잘못되었는지 평생 알 수 없습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?


정규식 특수 문자를 이스케이프하는 데 사용되는 백 슬래시를 두 배로 늘려야합니다. 그러나 @Bohemian이 지적했듯이 대부분의 백 슬래시는 필요하지 않습니다. 불행히도 그의 대답은 당신과 같은 문제로 고통받습니다. 실제로 원하는 것은 다음과 같습니다.

백 슬래시는 정규식 구문 분석기에 전달되지 않고 문자열을 읽는 코드에 의해 해석됩니다. 원하는 :

"[\\[\\]?*+|{}\\\\()@.\n\r]"

네 배로 된 백 슬래시에 유의하십시오. 그것은 확실히 필요합니다. 정규식 컴파일러에 전달 된 문자열은 @Bohemian의 문자열과 동일하며 올바르게 작동합니다.


@Bohemian을 기반으로 구축하면 가장 쉬운 방법은 정규식 리터럴을 사용하는 것입니다. 예 :

if (name.search(/[\[\]?*+|{}\\()@.\n\r]/) != -1) {
    // ... stuff ...
}

정규식 리터럴은 이스케이프 문자를 이스케이프 할 필요가 없기 때문에 좋으며 일부 IDE는 유효하지 않은 정규식을 강조 표시합니다 (계속해서 망쳐 놓기 때문에 매우 유용합니다).


첫째, 문자 클래스에서 [...] 대부분의 문자는 이스케이프가 필요하지 않습니다. 단지 리터럴 일뿐입니다.

따라서 정규식은 다음과 같아야합니다.

"[\[\]?*+|{}\\()@.\n\r]"

이것은 나를 위해 컴파일됩니다.

참고 URL : https://stackoverflow.com/questions/6288181/javascript-regex-nothing-to-repeat-error

반응형