자바 스크립트에서 정규식으로 작업하고 있습니다. /\/.+?$/
비 욕심쟁이 캐릭터가 '비 욕심쟁이'가 아닌 이유는 무엇입니까?
이 캐릭터 : 나는 결과로 /file
를 얻을 것으로 기대하고 대신 다시 전체 문자열을 얻고있다 /path/to/file
나는이 정규식이있다. 나는 여기서 무엇을 이해하지 못 하겠는가? ?
은 +
을 욕심이 없도록 만들어야합니다. 즉 가능한 적은 수의 문자와 일치합니다.
자바 스크립트에서 정규식으로 작업하고 있습니다. /\/.+?$/
비 욕심쟁이 캐릭터가 '비 욕심쟁이'가 아닌 이유는 무엇입니까?
이 캐릭터 : 나는 결과로 /file
를 얻을 것으로 기대하고 대신 다시 전체 문자열을 얻고있다 /path/to/file
나는이 정규식이있다. 나는 여기서 무엇을 이해하지 못 하겠는가? ?
은 +
을 욕심이 없도록 만들어야합니다. 즉 가능한 적은 수의 문자와 일치합니다.
정규식은 항상 왼쪽에서 오른쪽으로 일치하려고합니다. .+?
이 욕심이 없더라도 가능한 경우 정규 표현식은 문자열 시작 부분부터 계속 일치를 시도하고 일치가 실패 할 때만 시작 위치를 전진합니다. 당신의 경기는 항상 가능한 한 문자열로 시작하고 캡처 그룹을 사용할 수 있도록
당신은이 문제를 해결하는 몇 가지 옵션을 가지고 네가 원하는 걸 얻기 위해서. 여기 정규식은 /.*(\/.+?)$/
과 비슷할 수 있으며 첫 번째 캡처 그룹의 내용으로 /file
이됩니다.
.+?
이 추가로 /
과 일치하지 않도록 정규식을 변경하면 /\/[^\/]+$/
이됩니다. 표현식의 끝에있는 $
당신은 당신의 필요에 대한 부정을 사용할 수 있습니다
'/path/to/file'.match(/\/[^/]+$/);
//=> ["/file"]
귀하의 정규식 /\/.+?$/
처음 슬래시 일치하고 .+?
다음 아무것도 없기 때문에 .+?
를 사용하여 입력의 나머지 부분과 일치한다.
사용하면 다른 동작이 나타날 수 있습니다. /\/.+?\/$/
은 마지 못해 작동하며 /path/
과 일치합니다.
는 필수 끝 문자열 일치를 강제합니다. 이렇게하는 유일한 방법은 탐욕 스럽거나 그렇지 않은 전체 문자열을 잡는 것입니다.
그러나 $
없이는 정규식에 결함이 있습니다. /\/.+?/
은 전체 문자열이 /\/.+/
으로 일치하는 한 문자와 만 일치합니다. 제약 조건을 전혀 지정하지 않습니다. 는 제외 - -
/\/.[^\/]*/
'/\/.+?/'는 전체 문자열과 일치하지 않지만'/ p' 만 일치합니다. –
@MichaelMior : 헤드 업에 감사드립니다. 방금 그 사실을 깨달았습니다. – usr2564301
의미가있다. 설명 해줘서 고마워. 나는 정규식이 왼쪽에서 오른쪽으로 일치한다는 것을 잊고 있었다. –