이전 단어
JavaScript의 정규 표현식의 기본 구문이 이전에 소개되었습니다. regexp 클래스의 JavaScript는 정규식을 나타냅니다. 문자열과 regexp는 메소드를 정의합니다. 정규 표현식을 사용하면 강력한 패턴 매칭, 텍스트 검색 및 교체를 수행 할 수 있습니다. 이 기사는 정규 표현식의 regexp 객체와 관련 정기 표현을 소개합니다.
속성 및 방법
물체
JavaScript의 정규 표현식은 RegeXP 객체로 표시되며 두 가지 방법이 있습니다. 하나는 문자 그대로의 방법입니다. 다른 하나는 생성자 방법입니다
Perl Writing Method
JavaScript의 정규 표현 특성이 Perl에서 빌리기 때문에 Perl Writing이라고도하는 정규 표현 문자 쓰기
정규식 리터럴은 한 쌍의 슬래시 (/) 사이에 포함 된 문자로 정의되며 3 개의 플래그는 설정할 수 있습니다.
var 표현 = /패턴 /플래그;
정규 표현식의 일치 패턴은 다음 3 개의 플래그를 지원합니다.
G : 글로벌 패턴을 의미합니다. 즉, 첫 번째 경기가 발견 될 때 즉시 멈추지 않고 패턴이 모든 문자열에 적용됩니다.
I : 대사자 불신 모드, 즉 경기를 결정할 때 패턴과 문자열의 경우를 나타냅니다.
M : 멀티 라인 패턴, 즉 텍스트 줄의 끝에 도달하면 다음 줄에 패턴과 일치하는 항목이 있는지 계속 찾을 수 있습니다.
// 문자열의 'at'의 모든 인스턴스 var p =/at/a; // test () 메소드는 부울 값을 반환하여 일치에 대한 console.log (p.test ( 'ata'))); // trueconsole.log ( 'aba')); // false를 찾을 수 있는지 여부를 나타냅니다.
Regexp 생성자
일반적인 내장 객체와 마찬가지로 Regexp 정규식 객체는 New+Regexp () 생성자의 형태도 지원합니다.
regexp 생성자는 두 개의 매개 변수를 수신합니다 : 일치하는 문자열 패턴과 옵션 플래그 문자열 (플래그). 플래그 끈의 세 깃발과 문자 그럴은 같은 의미를 가지고 있습니다 : 'g', 'i', 'm'
Regexp 생성자의 두 매개 변수는 문자열입니다. 문자 형식을 사용하여 정의 된 모든 표현식은 생성자를 사용할 수 있습니다.
// 문자열의 'at'의 모든 인스턴스 var p1 =/at/g; // 위 var p2 = new regexp ( 'at', 'g');
[참고] ECMAScript3 사양은 정규 표현식 직접 수량이 실행될 때 RegeXP 객체로 변환 될 것이라고 규정합니다. 동일한 코드로 표시되는 정규 표현식 직접 수량의 각 작업은 동일한 객체를 반환합니다. ECMAScript5 사양은 반대 규정을 작성하고 동일한 코드로 표시되는 정규 표현식은 매번 직접 계산됩니다.
모든 작업은 새 개체를 반환합니다. IE6-8은 항상 ECMAScript5 사양에 따라 구현되었으므로 호환성 문제가 없습니다.
정규 표현식의 리터럴은 변수를 지원하지 않기 때문에 변수가 일반 표현식으로 나타나는 경우 regexp 생성자를 사용하여 REGEXP 생성자의 매개 변수를 문자열 스 플라이 싱으로 스플라이킹 할 수 있습니다.
【팁 element 클래스 이름을 통해 요소를 얻습니다
함수 getByClass (obj, className) {var elements = obj.getElementsByTagName ( '*'); var result = []; var pattern = new regexp ( '(^| // s)' + className + '(// s | $)'); for (var i = 0; i <elements.lenges.length; i ++) {if (pattern.test (elements [i] .classname)) {result.push (elements [i]); }} 반환 결과;}인스턴스 속성
각 regexp 인스턴스 객체에는 다음 5 가지 속성이 포함되어 있습니다
Global : 부울 값 G 플래그 ignorecase가 있는지 여부 : 부울 값은 i 플래그 LastIndex : Integer가 다음 경기를 검색하는 시작의 문자 위치를 나타냅니다. 0 Multiline에서 계산됩니다 : 부울 값은 플래그 msource : 정규 표현식의 문자열 표현 여부를 나타냅니다.
var pattern = new Regexp ( '// [bc //] at', 'i'); console.log (pattern.global); // falseconsole.log (pattern.ignorecase); // true Console.log (Pattern.multiline); // falseconsole.log (Pattern.lastIndex); // 0console.log (Pattern.Source); // '/[bc/] at'
regexp의 exec () 또는 test () 함수를 사용하고 글로벌 패턴 'g'를 설정하면 정규 표현식의 일치는 lastindex 위치에서 시작되며 각 언더 매칭이 성공한 후에 마지막 index가 재설정됩니다. 이런 식으로 문자열에서 반복적으로 반복하고 각 일치 결과를 순서대로 찾을 수 있습니다. 그러나 다른 문자열에 대해 동일한 regexp exec () 또는 test () 메소드를 호출 해야하는 경우이 변수는 예상치 못한 일치 결과를 가져올 수도 있습니다. 따라서 문자열을 교체 할 때는 regexp의 lastindex를 0으로 명시 적으로 설정해야합니다.
// exec () 메소드는 배열에서 일치를 반환합니다 var p = // w/g; var s = 'ab'; console.log (p.lastindex); // 0console.log (p.exec (s)); // [ 'a'] console.log (p.lastindex); // 1console.log ( p.exec (s)); // [ 'b'] console.log (p.lastindex); // 2console.log (p.exec (s)); // nullconsole.log (p.lastindex); // 0
var p = // w/g; var s1 = 'ab'; var s2 = 'ba'; console.log (p.lastindex); // 0console.log (p.exec (s1)); // [ 'a'] console.log (p.lastindex); // 1console.log (s2)); // [ 'a'] console.log (p.lastindex); // 2
생성자 특성
REGEXP 생성기 특성은 수행 된 가장 최근의 정규식 작동 작업에 따라 다른 정적 특성으로 간주됩니다.
액세스하는 두 가지 방법, 즉 긴 속성 이름과 짧은 속성 이름이 있습니다. 대부분의 짧은 속성 이름은 유효한 ECMAScript 식별자가 아니므로 Square Bracket Syntax를 통해 액세스해야합니다.
Long Attribute 이름 짧은 속성 이름 입력 $ _ Lastmatch $ & 일치하는 마지막 문자열 마지막 경기 마지막 경기 $+ 마지막 일치 마지막 경기 마지막 경기 캡처 그룹 LeftContext $`입력 텍스트 이전 매치 Multiline $* 부울 값을 모두 입력 문자열에서 마지막으로 텍스트를 사용한 멀티 라인 패턴 RightContext $ '를 사용하는지를 나타냅니다.
이러한 특성을 사용하면 exec () 메소드 또는 test () 메소드에 의해 수행 된 작업에서보다 구체적인 정보를 추출 할 수 있습니다.
// test ()는 문자열이 정규 표현식과 일치하는지 테스트하고 부울 값 var text = '이것은 짧은 여름이었다'; var pattern =/(.) hort/g; if (pattern.test (text)) {console.log (regexp.input); // '이것은'console.log (regexp.log); // '이었다. console.log (regexp.rightcontext); // 'summer'console.log (regexp.lastmatch); // 'short'console.log (regexp.lastparen); // 's'console.log (regexp.multiline); // false console.log (regexp [ '$ _)); console.log (regexp [ '$`]); //'이것은 'console.log (regexp ['$ ' "]); //'summer 'console.log (regexp ['$ & ']); //'short 'console.log (regexp ['$+'));'s ') }JavaScript에는 캡처 그룹을 저장하기위한 9 개의 생성자 속성이 있습니다. 이러한 속성은 exec () 또는 test () 메소드를 호출 할 때 자동으로 채워집니다.
[참고] 이론적으로, 전체 표현식 일치 텍스트에 저장 해야하는 Regexp. $ 0는 존재하지 않으며, 값은 정의되지 않았습니다.
//regexp.$1/regexp.$/regexp.$3. to Regexp. $ 9는 첫 번째, 두 번째, 9 번째, 9 번째 일치하는 캡처 그룹 var text = '이것은 짧은 여름'; var pattern =/(..) 또는 (.)/g; if (pattern.test (text)) {console.log (regexp. $ 1); // sh. Console.log (Regexp. $ 2); // t}예제 방법
regexp 객체의 5 가지 인스턴스 방법이 두 가지 범주로 나뉩니다. 객체의 세 가지 일반 방법 포함 : tostring (), tolocalstring (), valueof () 및 정기적 인 일치하는 테스트 () 및 exec ()
객체 공통 방법
regexp 객체는 객체 객체의 toString (), tolocalestring () 및 valueof ()의 세 가지 방법을 상속합니다.
【TOSTRING ()】
toString () 메소드는 정규 표현식의 문자를 반환합니다
【tolocalestring ()】
tolocalestring () 메소드는 정규 표현식의 문자를 반환합니다
【valueof () of
() 메소드의 값은 정규식 객체 자체를 반환합니다
[참고] 정규 표현이 무엇을 만들 든이 세 가지 방법은 리터럴 형식 만 반환합니다.
var pattern = new regexp ( '[bc] at', 'gi'); console.log (pattern.toString ()); // '/[bc] at/gi'console.log (pattern.tolocalestring ()); // '/[bc] at/gi'console.log (pattern.valueof ()); ///[bc] at/givar pattern =/[bc] at/gi; console.log (pattern.toString ()); // '/[bc] at/gi'console.log (pattern.tolocalestring ()); // '[bc] at/gi'console.log (pattern.valueof ()); ///[bc] at/gi
정기적 인 일치 방법
regexp 객체에는 각각 exec () 및 test ()에 대한 두 가지 정기 일치 방법 만 있습니다.
【exec ())
exec () 메소드는 그룹을 캡처하기 위해 특별히 설계되었으며 매개 변수, 즉 패턴을 적용 할 문자열을 수락합니다. 그런 다음 일치 정보가 포함 된 배열을 반환하고 일치하지 않으면 NULL을 반환하십시오.
경기 배열에서 첫 번째 항목은 전체 패턴과 일치하는 문자열이며 다른 항목은 패턴의 캡처 그룹과 일치하는 문자열입니다. 패턴에 캡처 그룹이 없으면 배열에는 하나만 포함됩니다.
반환 된 배열에는 인덱스와 입력의 두 가지 추가 속성이 포함되어 있습니다. 색인은 일치가 문자열의 위치에 있음을 의미합니다. 입력은 정규 표현식이 적용되는 문자열을 의미합니다.
var text = '엄마와 아빠와 아기와 다른 사람들'; var pattern =/mom (및 아빠 (및 아빠)?)?)?/gi; var matches = pattern.exec (text); console.log (pattern, matches); // pattern.lastindex : 20 // 일치 [0] : '엄마와 아빠와 아기'// 일치 [1] : 아빠와 아기 '// baby '// matches.index : 0 // matches.input :'엄마와 아빠와 아기와 다른 사람들 '
exec () 메소드의 경우, 글로벌 플래그 (g)가 패턴으로 설정 되더라도 한 번에 하나의 일치 만 반환합니다. 글로벌 플래그를 설정하지 않고도 동일한 문자열에서 exec ()를 여러 번 호출하면 항상 첫 번째 일치의 정보가 반환됩니다. 글로벌 플래그를 설정하는 동안 각 호출 exec ()는 문자열에서 새로운 일치를 계속 찾습니다.
var text = 'cat, bat, sat, fat'; var pattern1 = /.at/;var matches = pattern1.exec (text); console.log (pattern1, matches); // pattern1.lastindex : 0 // match [0] : 'cat'// matches.index : 0 // matches.input : 'cat, fat'var patt ='; pattern1.exec (텍스트); Console.log (Pattern1, Matches); //pattern1.lastIndex:0//matches] : 'cat'//matches.index:0//matches.input:'cat,Bat,Sat,Fat'
var text = 'cat, bat, sat, fat'; var pattern2 = /.at/g ;var matches = pattern2.exec (text); console.log (pattern2, matches); //pattern2.lastindex:3//matches=] : 'cat'//matches.index:0//matches.input:'cat,Bat,Sat, Fat'Var Text ='Cat, Bat, Sat, Fat '; Matches = Pattern2.Exec (Text); Console.log (Pattern2, Matches); //pattern2.lastIndex:7//matches] : 'bat'//matches.index:4//matches.input:'cat,Bat,Sat,Fat'
【팁 exec exec () 메소드를 사용하여 모든 일치하는 위치 및 모든 값을 찾습니다.
var string = 'j1h342jg24g234j 3g24j1'; var pattern = // d/g; var valuearray = []; // value var indexarray = []; // 위치 var temp; indexarray.push (temp.index); } // [ "1", "3", "4", "2", "2", "4", "2", "3", "4", "3", "2", "4", "1, 3, 4, 5, 8, 9, 11, 12, 13, 16, 18, 21] console.log (valuearray, Indexarray);
【시험()】
test () 메소드는 정규 표현식이 문자열에서 일치하는 텍스트를 찾을 수 있는지, 문자열 매개 변수를 받고 일치 할 때 true를 반환 할 수 있는지 테스트하는 데 사용됩니다. 그렇지 않으면 False를 반환합니다.
var text = '000-00-000'; var pattern = // d {3}-/d {2}-/d {4}/; if (pattern.test (text)) {console.log ( '패턴이 일치했다');}마찬가지로, test () 메소드가 호출되면 Regexp 객체의 LastIndex 속성이 변경됩니다. 글로벌 패턴이 지정되면 test () 메소드가 실행될 때마다 문자열의 LastIndex 오프셋 값이 일치하도록 시도됩니다. 따라서 동일한 regexp로 다른 문자열이 여러 번 확인됩니다. 각 호출 후에 LastIndex 값은 0으로 설정해야합니다.
var pattern = /^/d (4 }-/d {2 }-/d {2 }$/g;console.log(pattern.test('2016-06-23') ;//trueconsole.log(pattern.test('2016-06-23')) ;//false/////false // /^/d {4 }-/d {2 }-/d {2 }$/g;console.log(pattern.test('2016-06-23')); 0; console.log (pattern.test ( '2016-06-23')); // truepattern.lastindex = 0; console.log (pattern.test ( '2016-06-23')); // true앞에서 언급했듯이 JavaScript에는 캡처 그룹을 저장하기위한 9 개의 생성자 속성이 있습니다. 이 속성은 exec () 또는 test () 메소드를 호출 할 때 자동으로 채워집니다.
[참고] 이론적으로, 전체 표현식 일치 텍스트에 저장 해야하는 Regexp. $ 0는 존재하지 않으며, 값은 정의되지 않았습니다.
if (/^(/d {4})-(/d {2})-(/d {2}) $/. test ( '2016-06-23')) {console.log (regexp. $ 1); // '2016'Console.log (Regexp. $ 2); // '06'console.log (regexp. // '23); Console.log (Regexp. $ 0); // 정의되지 않은}위의 것은 JavaScript 유형 System_RegexPP 유형 세부 사항에 대한 자세한 설명입니다. 모두가 wulin.com을 지원하기를 바랍니다