이것은 확실히 많은 함정이있는 것입니다. 나는 Paolo Bergantino의 대답으로 작업하고 있었고 그것에도 약간의 한계가 있음을 깨달았습니다. 날짜의 문자열 표현으로 작업하는 것이 몇 가지 주요 문제를 빠르게 찾을 수있는 좋은 장소임을 알았습니다. 다음과 같은 입력 문자열로 시작합니다.
'12-2-2019 5:1:48.670'
다음과 같이 Paolo의 기능을 설정합니다.
function count(re, str) {
if (typeof re !== "string") {
return 0;
}
re = (re === '.') ? ('\\' + re) : re;
var cre = new RegExp(re, 'g');
return ((str || '').match(cre) || []).length;
}
함수를 더 재사용 할 수 있도록 정규식을 전달하고 싶었습니다. 둘째, 매개 변수를 문자열로 지정하여 클라이언트가 정규식을 만들 필요없이 단순히 문자열과 일치하도록했습니다. 표준 문자열 유틸리티 클래스 메서드.
이제 여기에서 입력 문제를 처리하고 있음을 알 수 있습니다. 다음과 같이 :
if (typeof re !== "string") {
return 0;
}
나는 입력이 문자처럼 아무것도 아니라는 것을 보장하고 0
, false
, undefined
, 또는 null
, 없음 문자열이되는가. 이러한 리터럴은 입력 문자열에 없기 때문에 일치 '0'
하는 항목이 없어야하지만 문자열 인은 일치해야 합니다.
다음과 같이 :
re = (re === '.') ? ('\\' + re) : re;
RegExp 생성자가 문자열 '.'
을 모든 문자 일치 자로 해석한다는 사실을 다루고 있습니다.\.\
마지막으로 RegExp 생성자를 사용하고 있기 때문에 'g'
다른 게시물의 제안과 유사하게 첫 번째 항목뿐만 아니라 모든 일치 항목을 계산하도록 전역 플래그 를 제공해야합니다 .
나는 이것이 매우 늦은 대답이라는 것을 알고 있지만 여기에서 걸림돌이되는 누군가에게 도움이 될 수 있습니다. BTW는 TypeScript 버전입니다.
function count(re: string, str: string): number {
if (typeof re !== 'string') {
return 0;
}
re = (re === '.') ? ('\\' + re) : re;
const cre = new RegExp(re, 'g');
return ((str || '').match(cre) || []).length;
}