programing

Chrome에서는 작동하지만 Safari에서는 작동하지 않습니다.잘못된 정규식: 잘못된 그룹 지정자 이름 /(?<=\/)([^#]+)(?=#*)/

closeapi 2023. 10. 3. 09:21
반응형

Chrome에서는 작동하지만 Safari에서는 작동하지 않습니다.잘못된 정규식: 잘못된 그룹 지정자 이름 /(?<=\/)([^#]+)(?=#*)/

나의 자바스크립트 코드에서 이 regex는/(?<=\/)([^#]+)(?=#*)/Chrome에서는 잘 작동하지만 사파리에서는 다음과 같은 결과를 얻을 수 있습니다.

잘못된 정규식: 잘못된 그룹 지정자 이름

무슨 생각 있어요?

Safari는 아직 사후 관리 기능을 지원하지 않는 것 같습니다(즉,(?<=\/)한 가지 대안은 다음과 같습니다./captured가 아닌 그룹에서 앞에 나온 다음 첫 번째 그룹만 추출합니다(다음의 내용)./그리고 그 전에#).

/(?:\/)([^#]+)(?=#*)/

또한.(?=#*)이상합니다 - 앞을 보고 싶을 수도 있습니다(예:#또는 문자열의 끝)이 아닌*quantifier(0 이상 발생)#) 같은 것을 사용하는 것이 더 나을 수도 있습니다.

/(?:\/)([^#]+)(?=#|$)/

아니면 앞을 내다보는 것을 완전히 생략합니다 (왜냐하면([^#]+)욕심이 많습니다), 상황에 따라.

레젝스?<=지원되지 않는 Safari iOS를 사용할 수 있습니다.?:참고:/또는 captured이 아닌 그룹에서 앞에 오는 첫번째 참고서.

자세한 내용 참조: https://caniuse.com/js-regexp-lookbehind

let str = "Get from Slash/to Next hashtag #GMK"


let workFineOnChromeOnly = str?.match(/(?<=\/)([^#]+)(?=#*)/g)
console.log("❌ Work Fine On Chrome Only", workFineOnChromeOnly )


let workFineSafariToo = str?.match(/(?:\/)([^#]+)(?=#*)/g)
console.log("✔️ Work Fine Safari too", workFineSafariToo )

RegExp에 대한 지원은 웹 키트에서 발표한 주장의 이면에 있습니다.

링크 확인 : https://github.com/WebKit/WebKit/pull/7109

이 문제를 우연히 발견하고 아무 것도 찾지 못하는 사람들을 위해 이 문제를 밖으로 내보내고 싶었을 뿐입니다.

저도 같은 문제가 있었는데 제 종속성 중 하나인 Discord.js에서 RegEx 표현으로 확인되었습니다.

다행히 나는 그 패키지가 더 이상 필요하지 않았지만 만약 그렇다면 문제를 넣거나 하는 것을 고려해보세요 (아마도 당신은 당신의 프론트엔드 반응 앱에서 discord.js를 실행하지 말아야 할 것입니다).

Safari는 16.4에서 지원 배경을 추가했습니다.

https://developer.apple.com/documentation/safari-release-notes/safari-16_4-release-notes#JavaScript

언급URL : https://stackoverflow.com/questions/51568821/works-in-chrome-but-breaks-in-safari-invalid-regular-expression-invalid-group

반응형