정규 표현식 - 그룹과 문자열 방법

16013 단어 javascriptbeginners
나의 강연에서 나는 정규 표현식을 어떻게 구성하고 사용하는지 이야기했다.이 글에서 저는 정규 표현식을 더욱 깊이 있게 소개하고 정규 표현식의 강력한 기능을 보여 주기를 바랍니다!

조를 나누다


특수 연산자를 사용하는 능력이 정규 표현식이 이렇게 강한 이유 중의 하나이다.게다가 정규 표현식은 몇 개의 문자를 한데 조합하고, 이 전체 문자에 연산자를 사용하면, 단독으로 문자열을 사용하는 것보다 더 구체적인 검색 패턴을 형성할 수 있다.괄호로 문자를 둘러싸고 괄호 뒤에 연산자를 붙여 전체 그룹에 적용합니다.예를 들면 다음과 같습니다.
const waluigi = /wa+(ha+)+/;

waluigi.test('waha');  // returns true
waluigi.test('waaaahaaaaha');  // returns true
waluigi.test('waahahaahahaa');  // returns true
위의regexp에서, 우리는 몇 개의 '+' 조작부호와 괄호 그룹이 있다.괄호 안에 "ha+"를 둘러싸고 괄호 뒤에 "+"연산자를 붙인 것을 주의하십시오.이것은 문자열'하'가 임의의 횟수를 나타낼 수 있고 임의의 수량의'a'가'h'뒤를 따를 수 있다는 것을 의미한다.괄호와 파이프 조작부호 '|' 를 결합시킬 수 있으며, 후자의 기능은 자바스크립트 '또는' 조작부호와 유사하다.이 연산자는 연산자 양쪽의 선택이 일치함을 나타냅니다.
const animals = /(cat|dog|turtle)s/;
animals.test('I like cats');  // returns true
animals.test('I like dogs');  // returns true
animals.test('I like turtles');  // returns true
animals.test('I like squids');  // returns false
파이프 조작원도 괄호 밖에서 일할 것이니 주의하십시오.

경계


"^"기호와 "$"기호는 각각 문자열의 시작과 끝을 나타냅니다.
const carat = /^\d/;

carat.test('5 time 5 is 25');  // returns true
carat.test('Five time five is 25');  // returns false

const dollar = /\d$/;

dollar.test('five times five is 25')  // returns true
dollar.test('five times five is twenty-five')  // returns false

const caratDollar = /^\d.+\d$/;
caratDollar.test('5 times 5 is 25')  // returns true
caratDollar.test('5 times 5 is twenty-five')  // returns false
caratDollar.test('Five times 5 is 25')  // returns false
caratDollar.test('Five times 5 is twenty-five')  // returns false
위의 예에서, 우리는 우리의 클라레텍스가 '^' 로 시작하고, 그 다음은 '\d' 로 시작하는 것을 보았다.이것은 문자열의 첫 번째 문자가 반드시 숫자여야 한다는 것을 의미한다.이와 유사하게, dollar regexp에서는 문자열이 숫자로 끝나야 한다는 것을 '$' 기호로 표시합니다.우리는 카트 Dollar에서 이 두 문자를 조합하고, 중간에 '+' 를 붙여서 문자열이 어떤 숫자로 시작하고 끝날지, 그리고 다른 문자가 있는지 테스트할 수 있다. (줄 바꾸기 문자를 제외하고!)둘 사이에 끼다."""\b""태그를 사용할 수도 있습니다."이것은 단어의 경계를 나타낸다. 이것은 '\b' 를 찾을 수 있는 위치가 문자열의 시작이나 끝일 수도 있고, 알파벳이 아닌 숫자일 수도 있다는 것을 의미한다.
const spaceFirst = /\bcat/;
spaceFirst.test('I like cats');  // returns true
spaceFirst.test('.cats');  // returns true
spaceFirst.test('9cats');  // returns false
spaceFirst.test('concat');  // returns false


const spaceLast = /cat\b/;
spaceLast.test('I like cats');  // returns false
spaceLast.test('I have a cat');  // returns true
spaceLast.test('I have a cat.');  // returns true
spaceLast.test('concatenate');  // returns false

const allAlone = /\bcat\b/;
allAlone.test('I like cats');  // returns false
allAlone.test('I have a cat');  // returns true
allAlone.test('My cat is friendly');  // returns true
allAlone.test('I have a cat.');  // returns true
allAlone.test('concatenate');  // returns false

문자열 사용 방법


마지막으로 정규 표현식은 트루나false만 되돌아오는 것이 아니라 몇 개의 문자열 방법과 함께 사용할 수 있다.우선 수색에 대해 이야기합시다.레지스터와indexOf 메서드를 와 함께 사용할 수 있습니다.수색하다.이것은 일치하는 항목의 첫 번째 인덱스를 되돌려줍니다. 일치하는 항목을 찾지 못하면 -1을 되돌려줍니다. 아래와 같습니다.indexOf.예를 들면 다음과 같습니다.
const searchExp = /chicken/;
const searchString= `Don't count your chickens before they hatch`;

searchString.search(searchExp);  // returns 17
그러나 이와 다르다.indexOf, 특정한 인덱스부터 시작할 수 없습니다.그 다음에 너는 있다.일치합니다. 이것은 사실상 정규 표현식이 필요합니다.match는 문자열의 모든 일치하는 항목의 그룹을 되돌려줍니다. ("g"로고를 사용하지 않으면 하나만 되돌려줍니다.문자열보다 정규 표현식이 더 구체적일 수 있다는 것을 기억할 때 유용합니다.예를 살펴보겠습니다.
const matchExp = /\d+/g;
const matchString = 'I had a 10, 9, 4, 2, and ace.'
matchString.match(matchExp);  // returns ["10", "9", "4", "2"]
마지막으로 우리는 해냈다.교체!우리는 문자열을 사용하는 것처럼 그것을regexp만 사용할 수 있지만, 정규 표현식과 표현식은 다른 재미있는 용례가 있다.바꾸다.우선, 우리는 g 로고를 사용하여 문자열에 나타나는 모든 일치하는 항목을 바꿀 수 있음을 나타낼 수 있다. (같은 일을 할 수 있는 리플렉스 All이 있지만, 본문을 작성할 때, 모든 브라우저에서 완전히 작용하는 것은 아니다. 리플렉스 with regular expressions는 그렇다.)
const replaceAllExp = /(cat|dog|fish)/g;
const replaceAllString = 'cat dog fish'
replaceAllString.replace(replaceAllExp, 'turkey');  // returns 'turkey turkey turkey'
우리도 교체 문자열에서 인용 그룹이 일치할 수 있습니다.당신이 그것이 발생하는 것을 본 후에, 이것은 더욱 생각하기 쉽다.
const namesExp = /(\w+), (\w+)/g
const names = 'Potter, Harry, Weasley, Ronald, Granger, Hermione';
names.replace(namesExp, "$2 $1");  // returns "Harry Potter, Ronald Weasley, Hermione Granger"
정규 표현식에서, 우리는 두 개의 그룹이 있는데, 괄호로 표시한다.우리 전화 회의에서문자열에 $2와 $1이 있음을 주의하십시오.이 형식은 정규 표현식 그룹을 가리킨다.우리는 기본적으로 두 번째 표현식에서 찾은 모든 것을 첫 번째 표현식에서 찾은 모든 것 앞에 놓고 둘 사이에 빈칸을 남긴다.정규 표현식의 마지막 용법.replace는 문자열에 대한 동작을 수행하기 위해 함수와 함께 사용합니다.이것은 아래의 상황에서도 가능하다.replace는 두 문자열과 함께 사용되지만 정규 표현식을 사용하여 검색 모드를 보다 구체적으로 사용할 수 있습니다.
const funcExp = /\b(jfk|fdr)\b/g
const presidents = "I prefer jfk to fdr";
presidents.replace(funcExp, str => str.toUpperCase());  // returns "I prefer JFK to FDR"

결론


문자열을 처리할 때 정규 표현식은 기억해야 할 강력한 도구입니다.그것들은 우리의 문자열 방법을 강화하거나, 보통 하나의 표현식으로 여러 줄 코드를 실행하는 것을 허용할 수 있다.

좋은 웹페이지 즐겨찾기