>  기사  >  웹 프론트엔드  >  자바스크립트 정규식의 기초 소개_자바스크립트 기술

자바스크립트 정규식의 기초 소개_자바스크립트 기술

WBOY
WBOY원래의
2016-05-16 16:03:011319검색

정규 표현식의 이점은 무엇인지 먼저 알아볼까요?
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>

당분간 여기에 글을 쓰고 업데이트를 계속하겠습니다. . .

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.