정규 표현식의 이점은 무엇인지 먼저 알아볼까요?
js에서 문자열을 처리하는 방법을 사용하여 문자열에서 숫자를 추출하는 함수를 작성합니다.
var str='dgh6a567sdo23ujaloo932'; function getNumber(obj){ var arr=[]; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ arr.push(obj.charAt(i)); } } return arr; }; console.log(getNumber(str)); //["6", "5", "6", "7", "2", "3", "9", "3", "2"]
위의 방법으로 문자열에 있는 숫자를 꺼냈지만 만족스럽지 않습니다. 우리에게 필요한 것은 ['6','567','23','932'] 형식과 함수 변환입니다. :
function getNumber(obj){ var arr=[]; var temp=''; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ temp+=obj.charAt(i);//现将相邻的数字连接起来 } else{ //每当连接的数字断开时,就在这执行 if (temp) { arr.push(temp); temp=''; } }; } if (temp) { //这里的作用是为了显示最后数字的,原因不想解释 arr.push(temp); temp=''; } return arr; };
그런 다음 정규식을 사용하여 이 함수로 구현된 함수를 해결합니다.
function getNumber2(obj){ var arr=[]; var re=/\d+/g; arr.push(obj.match(re)); return arr; };
프로그램의 실행 결과를 전체적으로 살펴보겠습니다.
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6a567sdo23ujaloo932'; /*function getNumber(obj){ var arr=[]; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ arr.push(obj.charAt(i)); } } return arr; };*/ function getNumber(obj){ var arr=[]; var temp=''; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ temp+=obj.charAt(i);//现将相邻的数字连接起来 } else{ //每当连接的数字断开时,就在这执行 if (temp) { arr.push(temp); temp=''; } }; } if (temp) { //这里的作用是为了显示最后数字的,原因不想解释 arr.push(temp); temp=''; } return arr; }; function getNumber2(obj){ var arr=[]; var re=/\d+/g; arr.push(obj.match(re)); return arr; }; console.log(getNumber(str)); console.log(getNumber2(str)); }; </script> <body> </body> </html>
위의 예를 보면 정규식 방법은 동일한 효과를 가지지만 코드가 더 짧고 더 효율적이라는 것을 알 수 있습니다
정규식은 문자열을 더 효율적으로 처리하기 위해 생성됩니다. 문자열 처리 방법과 동일하지만 더 효율적이고 간결합니다(정규식은 문자열만 처리할 수 있음)
몇 가지 일반적인 정규화 방법을 체계적으로 연구해 보겠습니다.
그 전에 정규식을 작성하는 방법에 대해 알아보겠습니다. 정규식은 다른 객체인 array(), object(), Date() 등과 동일하며 모두 초기화 방법이 있습니다
var re=/여기에 일치하는 내용을 작성해야 합니다. 작성하지 않으면 기호에만 집중하게 됩니다. //이것은 일반 객체의 간단한 생성이므로 다음 기사에서 직접 사용하겠습니다.
var re=new RegExp(); // 이런 생성 방법도 가능하다는 것은 다들 아시겠지만, 약어와 다른 점은 전달하는 매개변수가 조금 다르다는 것입니다
(1)테스트
의미: 문자열을 정기적으로 일치시키고, 일치에 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
구문: re.test(string);
먼저 이스케이프 문자에 대해 이야기해 보겠습니다.
/s 공백 /S 공백 없음 /d 숫자 /D 숫자 아님 /w 문자(문자, 숫자, 밑줄) /W 문자 아님
예: 문자열이 모두 숫자인지 확인
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6a567sdo23ujaloo932'; var str2='123456'; function allNumber(obj){ var re=/\D/;//定义正则对象匹配非数字,只要有不是数字的就是匹配结束返回结果 if (re.test(obj)) { alert('不全是数字'); } else{ alert('全是数字'); }; }; allNumber(str); allNumber(str2); }; </script> <body> </body> </html>
(2) 검색
의미: 문자열을 정기적으로 일치시킵니다. 일치가 성공하면 일치한 위치가 반환됩니다. 그렇지 않으면 문자열 처리 방법에서 indexof()와 동일한 함수가 반환됩니다.
구문: string.search(re);
[color=Red]참고: 정규식은 기본적으로 대소문자를 구분합니다. 대소문자를 구분하지 않으려면 i 플래그를 추가하세요.[/color]
예, 문자열에서 특정 문자
의 대소문자를 구분하지 않는 정규 일치
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6b567sdo23ujaloo932'; function searchStr(obj){ var re=/B/i;//定义正则对象匹配b字符,不区分大小写 alert(obj.search(re)); }; searchStr(str); }; </script> <body> </body> </html>
(3)일치
의미: 일치하는 문자열이 정기적으로 일치하면 성공한 일치 항목의 배열이 반환됩니다. 그렇지 않으면 Null
이 반환됩니다.
구문: string.match(re);
[color=Red] 참고: 정규식의 기본값은 일치가 성공하는 한 즉시 종료되고 해당 값을 반환하며 일치는 계속되지 않습니다. 모두 찾으려면 g(전역 매칭) [/color]를 추가해야 합니다
예: 문자열에서 연속된 숫자를 일치시켜 배열에 저장합니다. (연속된 숫자는 배열의 항목으로 사용됩니다.)
프로그램에서 " "는 일치가 한 번 이상 발생한다는 의미입니다. 왜 이러나요?
앞서 "정규식의 기본값은 일치가 성공하는 한 즉시 종료되고 해당 값을 반환하는 것입니다."라고 언급했습니다. 그런 다음 문자열에서 숫자가 일치하면 종료되고 숫자가 반환됩니다. 이때 필요한 것은 g를 사용하여 모든 요소를 일치시키는 것입니다.
연속된 숫자의 정해진 숫자가 없다는 것을 발견한 적이 있습니까? " "를 사용하여 숫자의 동적 숫자를 충족할 수 있습니다.
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6b567sdo23ujaloo932'; function searchStr1(obj){ var re=/\d/; return obj.match(re); }; function searchStr2(obj){ var re=/\d/g; return obj.match(re); }; function searchStr3(obj){ var re=/\d\d/g;//全局匹配2位数 return obj.match(re); }; function searchStr4(obj){ var re=/\d+/g; return obj.match(re); }; console.log(searchStr1(str)); console.log(searchStr2(str)); console.log(searchStr3(str)); console.log(searchStr4(str)); }; </script> <body> </body> </html>
(4)바꾸기
의미: 문자열을 정기적으로 일치시키고 성공적으로 일치된 문자열이 새 문자열로 대체되는 경우
구문: string.replace(re);
예: 문자열의 모든 a를 b
로 바꿉니다.
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='daah6b5a7sdo23ujaloo932'; function replaceStr(obj){ var re=/a/g; //全局匹配a return obj.replace(re,'b'); }; console.log(replaceStr(str)); }; </script> <body> </body> </html>
당분간 여기에 글을 쓰고 업데이트를 계속하겠습니다. . .
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.