형님, 최근에 자바스크립트를 배우고 있는데, 정규식을 배우다가 지식 포인트가 좀 헷갈리는 것을 발견해서 정리해보려고 블로그를 작성하게 되었습니다.
정의
JavaScript에서 reg exp를 정의하는 방법에는 두 가지가 있습니다.
1) 새 exp 사용: var exp1 = new exp("abc")
2) 두 /s 사이에 직접 패턴을 배치합니다. var exp2 = /abc/ //참고. . 큰따옴표가 없습니다. 추가하면 문자열이 됩니다.
특수문자
눈으로 확인해보면 특수문자는 Perl의 것과 동일합니다. . 그냥 직접 사용하세요
d 숫자 문자
w 영숫자 문자(“단어 문자”)
s 공백 문자(공백, 탭, 줄바꿈 등)
D 숫자가 아닌 문자
W 영숫자가 아닌 문자
S 공백이 아닌 문자
. 마침표는 줄 바꿈을 제외한 모든 문자와 일치합니다.
기억하는 방법은 매우 간단합니다.
d = 숫자 숫자
w = 단어 문자입니다
s = 공백 공백입니다
대문자는 모두 반전됩니다. .
괄호 []
괄호 안에 패턴을 넣는 것은 어떤 문자와도 일치하는 한 참이라는 의미입니다. (java나 Perl과 동일)
예를 들어
console.log(/[01]/.test("023424")) // true
console.log(/[01]/.test("13424" )) ; // true
console.log(/[01]/.test("23424")) // false
괄호 ()
는 괄호 안에 있는 모든 항목이 true여야 함을 의미합니다.
예를 들어
console.log(/[01]/.test("013424")) // true
console.log(/[01]/. test("13424")); // 거짓
console.log(/[01]/.test("230424")) // 거짓
console.log(/[ 01]/.test("230142401 ")); // true
정량자
는 java와 동일합니다. . 이 시계는 아주 좋습니다. . 형님 저는 항상
을 즐겨 사용합니다.
Greedy |
Reluctant |
Possessive |
Meaning |
X? |
X?? |
X? |
X, once or not at all |
X* |
X*? |
X* |
X, zero or more times |
X |
X ? |
X |
X, one or more times |
X{n} |
X{n}? |
X{n} |
X, exactly n times |
X{n,} |
X{n,}? |
X{n,} |
X, at least n times |
X{n,m} |
X{n,m}? |
X{n,m} |
X, at least n but not more thanm times |
표현식 객체 함수
1) test 매우 간단합니다. 테스트할 문자열을 test(...)에 넣으면 이 함수는 true/false를 반환합니다. 일치를 나타냅니다. /unmatch
2) exec, 일치하는 문자열이 없으면 이 함수는 null을 반환합니다. 찾으면 배열을 반환합니다. 여기에는 일치하는 문자열이 순서대로 포함됩니다.
3 ) 문자열 .replace(expression1, string1) 이 함수는 표현식의 일치 부분을 string1로 대체합니다. string1에서 이전 표현식의 괄호로 묶인 그룹
을 사용하여 해당 부분을 대체할 수 있습니다. 예를 들어 "co-ol".replace(/[w] -[w] /,"$2-$1"); //"ol-co"는 $9까지 사용할 수 있습니다
4)String. 교체(표현식, 함수) 이는 향상된 버전이며 함수를 통해 원하는 출력을 정의할 수 있습니다. 구체적인 사용법은 여기에 나와 있지 않습니다.
링크를 열려면 클릭하세요
reg 표현식의 동적 생성
reg exp에서 사용하려는 항목을 다른 사용자만 알 수 있는 경우를 참조하세요. 런타임에 이 메서드를 적용하여
reg exp를 생성할 수 있습니다. 실제로 문자열을 사용하여 reg exp의 모양을 만든 다음 Exp의 생성자를 사용하면 됩니다. (글 시작 부분에 언급)
예:
var name = "dear"
"oh, my dear".replace(new Exp(name), "god") // 맙소사
그러나 이름에 정규식에 사용할 수 있는 특수 문자가 있으면 위의 방법이 잘못되는 경우가 많습니다.
이 경우 입력 문자열의 각 문자 앞에 백슬래시를 추가할 수 있습니다. 예를 들어 다음과 같습니다.
var name = df[]vxv;
var expName = name.replace("/[^/w/s]/g"," \$&");
"내 이름은 df[]vxv".replace(new Exp(name), "Bob"); // 내 이름은 Bob입니다