RegExp 개체의 의미 및 사용법:
문자열 일치를 확인하고, 문자열 내용의 일부를 얻고, 원래 문자열을 기반으로 새 문자열을 구성합니다(추가, 삭제 및 수정 포함).
RegExp 객체를 구성하는 두 가지 주요 방법은 다음과 같습니다.
/w/g와 같은 리터럴을 사용합니다.
new RegExp(/w/)와 같은 생성자를 사용하세요.
RegExp 개체를 생성할 때 주의해야 할 몇 가지 사항이 있습니다.
리터럴은 런타임에 의해 생성되지 않는 정적 RegExp 개체를 생성하는 데 종종 사용됩니다.
일치하는 문자열의 실행 결과를 제한하기 위해 리터럴 바로 뒤에 플래그를 추가할 수 있습니다. 일반적으로 사용되는 플래그에는 전역 일치(전역) 및 대소문자 구분 없는 일치(대소문자 구분 안 함)를 각각 나타내는 데 사용되는 g 및 i가 포함됩니다.
RegExp 생성자의 첫 번째 매개변수는 객체의 패턴을 제공합니다. 패턴이 RegExp 리터럴인 경우 두 번째 매개변수(즉, 플래그 지정)를 제공할 수 없습니다. 패턴이 문자열인 경우 두 번째 매개변수를 사용할 수 있습니다.
RegExp 생성자는 런타임에 의해 생성된 동적 RegExp 개체를 만드는 데 자주 사용됩니다.
RegExp의 패턴이 문자열인 경우 ""는 문자열에서 이스케이프되어야 하므로 리터럴의 모든 ""는 "\"로 작성되어야 합니다. 따라서 /w/ == /w/Return false
RegExp 객체 관련 함수:
문자열 일치를 확인하려면 문자열이 regExp에서 제공하는 패턴과 일치하는지 확인하는 regExp.test(string) 메서드를 사용할 수 있습니다. 두 가지가 일치하지 않으면 -1을 반환하는 string.search(regExp) 메서드를 사용할 수도 있습니다.
문자열의 일부를 얻으려면 regExp.exec(string) 메서드를 사용하거나 string.match(regExp) 메서드를 사용할 수 있습니다. 원래 문자열에 새 문자열을 만들려면 일반적으로 string.replace(searchValue, 교체값) 메서드
패턴의 의미는 RegExp 개체에서 제공됩니다.
RegExp는 "|"로 구분된 여러 Alternative를 정의할 수 있습니다. 이 작업은 우선순위가 가장 낮으므로 "|"가 있으면 먼저 RegExp를 여러 부분으로 나눕니다. 용어 부분으로 구성되며 용어는 어설션(위치 한정에 사용), 원자(일치 단위), 수량자가 있는 원자(수정자)로 구분됩니다.
어설션은 문자열의 시작 부분을 일치시키는 데 사용되는 "^"로 구분됩니다. multiInput에서는(즉, 플래그에 m이 포함된 경우) 줄의 시작 부분과 일치하는 데 사용됩니다. multiInput에서는(즉, 플래그에 m이 포함된 경우) 줄의 끝과도 일치할 수 있습니다. "b"는 w 및 W 간격과 일치하는 데 사용됩니다. 문자열의 모든 내용은 위치 일치를 결정하는 데에만 사용됩니다.
원자의 상황은 더 복잡합니다. 먼저 * + ? {n} {m,} {m,n}을 포함할 수 있는 원자의 수량자를 살펴보겠습니다. 여기서 *는 원자가 0개 이상의 반복을 가질 수 있음을 의미합니다. 1 이상 위의 반복에서 ?는 0회 또는 1회를 의미하고, {n}은 정확히 n회 반복을 의미하고, {m,}는 m회 이상의 반복을 의미하고, {m,n}은 반복 횟수가 m에서 n 사이임을 의미합니다(포함). m 및 n ), 위의 수량자 뒤에 ? 를 붙여 non-greedy 모드를 시작할 수도 있습니다. 이 모드의 의미는 나중에 설명하겠습니다.
Atom에는 PatternCharacter(일반 문자, 즉 문자 그대로 일치하는 패턴에 특별한 의미가 없는 문자)가 포함되어 있습니다.
"."는 줄 종결자가 아닌 모든 문자와 일치합니다.
AtomEscape에는 숫자 1이 포함되어 있습니다(앞의 괄호에서 성공적인 일치를 나타내는 데 사용됨). 일부 문자에 대한 참조 n f r t v xNN uXXXX cX 등 d D s S w W와 같이 특별한 의미를 갖는 일부 문자
CharacterClass에는 [...] 및 [^...]의 두 가지 형식이 포함됩니다. -, n 및 기타 문자 참조, b, d 및 기타 특수 의미 문자와 같은 많은 문자를 포함할 수 있습니다. "-" 주위에 문자가 있으면 의미가 특정 문자에서 특정 문자로 변경됩니다. "-" 왼쪽이나 오른쪽에 문자가 없으면 "-"는 대시 문자만 나타냅니다.
(그룹), 위 모드에서 그룹화를 수행하면 그룹화 이후에 Quantifier를 사용하여 수정할 수 있습니다.
(?:group)은 그룹으로만 사용되며 그룹과 일치하는 콘텐츠는 기록되지 않으며 1..n에 포함되지 않습니다.
(?=group), 일치가 필요하지만 반환된 일치 문자열에 그룹 일치 콘텐츠가 포함되지 않습니다.
(?!group)은 일치가 필요하지 않으며 반환된 일치 문자열에 그룹 일치 콘텐츠를 포함하지 않습니다. 이제 RegExp의 두 가지 더 중요한 작동 모드에 대해 이야기하고 싶습니다.
일치하는 대안은 항상 왼쪽에서 오른쪽입니다. 첫 번째 일치는 더 이상 /ab|abc/.exec("abc")와 같은 후속 일치를 시도하지 않습니다
. 위 문자열 "abc"는 패턴의 ab와만 일치하고 abc와 일치하지 않습니다
. Quantifier 뒤에 ?를 추가하지 않으면 Greedy 모드가 사용됩니다. 예를 들어
/w+bc/.exec("abcbcbc")와 일치하면 w+가 사용됩니다. 항상 가능한 많은 일치 항목을 먼저 일치시키므로(예: 탐욕 모드) "abcbcbc"와 일치합니다.
/w+?bc/.exec("abcbcbc")로 변경되면 가능한 한 적은 수와 일치합니다( 즉, non-greedy 모드)이므로 "abc"에만 일치합니다.
일반적인 문자열 구문 분석 요구 사항의 경우 일반적으로 exec 또는 match 메서드를 사용하여 구문 분석할 수 있습니다. 문자열이 큰 경우 구문 분석을 위해 루프 구조를 사용해야 하는 경우가 많습니다. while 및 기타 문과 결합하면 매우 강력합니다.
기존 문자열을 수정하여 다른 문자열로 변환하려면 일반적으로 항상 바꾸기 메서드를 사용하는데, 내 생각에는 이 메서드가 다형성으로 인해 거의 모든 형식을 충족할 수 있습니다. 문자열 수정이 필요합니다.