이 글에서는 주로 정규식과 관련된 문제를 소개하는 javascript에 대한 관련 지식을 제공합니다. 정규식은 다양한 문자열이 이 기능과 일치하는지 확인한 다음 고급 텍스트 검색, 교체, 콘텐츠 차단을 구현하는 데 사용되는 특정 형식 지정 패턴입니다. 그리고 다른 작업이 모두에게 도움이 되기를 바랍니다.
관련 권장 사항: javascript 튜토리얼
Regular Expression(정규 표현식, regexp이라고 함)
응용 프로그램: 프로젝트 개발 시 휴대폰 번호의 특정 숫자 숨기기, 데이터 수집, 민감한 단어 필터링, 양식 확인 등의 기능을 모두 정규식을 사용하여 구현할 수 있습니다.
적용 분야: 운영체제(Unix, Linux 등), 프로그래밍 언어(C, C++, Java, PHP, Python, JavaScript 등).
예: 텍스트 검색을 예로 들어 보겠습니다. 대량의 텍스트에서 특정 기능(휴대폰 번호 등)과 일치하는 문자열을 찾은 경우 정규 표현식의 구문에 따라 이 기능을 작성하여 구성합니다. 컴퓨터 프로그램이 패턴을 인식하면 컴퓨터 프로그램은 이 패턴을 기반으로 텍스트를 일치시켜 규칙과 일치하는 문자열을 찾습니다.
정규식의 개발 역사
정규식의 표현 형태
개발 중에는 정규 매칭 패턴을 기반으로 지정된 문자열의 검색 및 매칭을 완료해야 하는 경우가 많습니다.
문자열 내에서 지정된 값을 검색하는 것 외에도 String 개체의 match() 메서드는 일반 규칙에 따라 대상 문자열의 요구 사항을 충족하는 모든 콘텐츠를 일치시킬 수도 있습니다. 일치가 성공하면 배열에 저장하고 일치가 실패하면 false를 반환합니다.
JavaScript 애플리케이션에서는 정규식을 사용하기 전에 먼저 일반 개체를 만들어야 합니다. 앞에서 설명한 리터럴 생성 외에도 RegExp 개체의 생성자를 통해 생성할 수도 있습니다.
독자들이 일반 물체 획득을 더 잘 이해할 수 있도록 특수 문자 "^", "$", "*", "." 및 ""를 일치시키는을 예로 들어 비교 및 설명합니다.
Note
생성자 메소드와 리터럴 메소드로 생성된 일반 객체는 기능적으로는 완전히 동일하지만 구문 구현에서는 약간의 차이가 있습니다. 전자 패턴에서는 이스케이프하려면 백슬래시( )가 필요합니다. 후자의 패턴을 작성할 때 구분자 "/" 안에 배치해야 하며 플래그 태그는 종료 구분자 외부에 배치해야 합니다. 읽다.
사례 2: 0에서 9 사이의 숫자를 일치시키려면 "d"를 사용할 수 있습니다.
문자 카테고리의 사용을 독자가 더 쉽게 이해할 수 있도록 다음에서는 "." 및 "s"를 예시로 사용합니다. 공백 문자 뒤의 두 문자(줄 바꿈 제외)그래서 콘솔에서 본 결과에는 ID 앞에 공백이 있습니다.
문자 집합문자 집합 표현: "[]"는 문자 집합을 구현할 수 있습니다.문자 "-"는 일반적인 상황에서만 일반 문자를 나타내며 문자 범위를 나타낼 때만 메타 문자로 사용됩니다. "-" 하이픈으로 표시되는 범위는 문자 인코딩 순서를 따릅니다. 예를 들어 "a-Z", "z-a" 및 "a-9"는 모두 잘못된 범위입니다.
[사례] 입력 내용 제한
코드 구현 아이디어
:
HTML을 작성하고 연(월), 월(월)에 대한 텍스트 상자와 쿼리 버튼을 설정합니다. 작업의 요소 개체를 가져오고 양식 제출을 확인하세요.
검증 연도, 일반: /^d{4}/. 월 확인, 일반 규칙: / ( ( 0 ? [ 1 − 9 ] ) ∣ ( 1 [ 012 ] ) ) /.
텍스트 상자에 초점이 맞춰지고 프롬프트 상자의 색상이 제거됩니다. 텍스트 상자는 포커스를 잃고 입력 내용 양쪽 끝의 공백을 제거한 후 유효성을 검사합니다.
코드 구현
nbsp;html> <meta> <title>限定输入内容</title> <style> input[type=text]{width: 40px;border-color: #bbb;height: 25px;font-size: 14px;border-radius: 2px;outline: 0;border: #ccc 1px solid;padding: 0 10px;-webkit-transition: box-shadow .5s;margin-bottom: 15px;} input[type=text]:hover, input[type=text]:focus,input[type=submit]:hover{border: 1px solid #56b4ef; box-shadow: inset 0 1px 3px rgba(0,0,0,.05),0 0 8px rgba(82,168,236,.6); -webkit-transition: box-shadow .5s;} input::-webkit-input-placeholder {color: #999; -webkit-transition: color .5s;} input:focus::-webkit-input-placeholder, input:hover::-webkit-input-placeholder {color: #c2c2c2; -webkit-transition: color .5s;} input[type=submit]{height: 30px; width: 80px; background: #4393C9; border:1px solid #fff;color: #fff;font:14px bolder; } </style><script> function checkYear(obj) { if (!obj.value.match(/^\d{4}$/)) { obj.style.borderColor = 'red'; result.innerHTML = '输入错误,年份为4位数字表示'; return false; } result.innerHTML = ''; return true; } function checkMonth(obj) { if (!obj.value.match(/^((0?[1-9])|(1[012]))$/)) { obj.style.borderColor = 'red'; result.innerHTML = '输入错误,月份为1~12之间'; return false; } result.innerHTML = ''; return true; } var form = document.getElementById('form'); // <form>元素对象 var result = document.getElementById('result'); // <p>元素对象 var inputs = document.getElementsByTagName('input'); // <input>元素集合 form.onsubmit = function() { return checkYear(inputs.year) && checkMonth(inputs.month); }; inputs.year.onfocus = function() { this.style.borderColor = ''; }; inputs.month.onfocus = function() { this.style.borderColor = ''; }; if (!String.prototype.trim) { String.prototype.trim = function() { return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); // \uFEFF字节顺序标记;\xA0不换行空白 }; } inputs.year.onblur = function() { this.value = this.value.trim(); checkYear(this); }; inputs.month.onblur = function() { this.value = this.value.trim(); checkMonth(this); }; </script>
RegExp 클래스의 메서드
test() 메서드: 정규식이 지정된 문자열과 일치하는지 확인합니다.
일치에 성공하면 test() 메서드의 반환 값이 true이고, 그렇지 않으면 false를 반환합니다.
일반 개체의 패턴 수정자를 검색
RegExp 클래스에는 현재 일반 개체에서 사용하는 패턴 수정자를 검색하고 다음 일치 항목의 시작 인덱스를 지정하는 데 사용되는 일부 속성도 있습니다. .
독자가 이러한 속성의 사용을 더 잘 이해할 수 있도록 다음은 일치하는 공백을 예로 들어 설명합니다.
search() 메서드: 지정된 패턴의 하위 문자열이 문자열에서 처음 나타나는 위치를 반환할 수 있으며 이는 indexOf() 메서드보다 강력합니다.
split() 메서드: 지정된 구분 기호를 기준으로 문자열을 문자열 배열로 분할하는 데 사용됩니다. 분할 문자열 배열에는 구분 기호가 포함되지 않습니다.
구분 기호가 두 개 이상인 경우 문자열 분할 작업을 완료하려면 일반 개체를 정의해야 합니다.
참고
문자열이 비어 있는 경우 Split() 메서드는 빈 문자열이 포함된 배열 "[""]"를 반환합니다. 문자열과 구분 기호가 모두 빈 문자열인 경우 빈 배열 "[을 반환합니다. ]".
실습
비밀번호 강도 확인
비밀번호 강도 확인 조건:
① 길이
②길이는 6자 이상이고 숫자, 문자 또는 기타 문자 중 하나를 포함합니다. 비밀번호 강도는 "낮음"입니다.
③ 길이는 6자 이상이고 두 가지 유형의 숫자, 문자 또는 기타 문자를 포함합니다. 비밀번호 강도는 "중간"입니다.
4길이가 6자 이상이며 숫자, 문자 또는 기타 문자가 3개 이상 포함되어 있습니다. 비밀번호 강도는 "높음"입니다.
질문하기: 연속된 문자(예: 6개의 연속 숫자 "458925")를 일치시킵니다.
해결책 1: 일반 개체/dddddd/gi.
문제: 반복되는 "d"는 읽기도 쉽지 않고 쓰기도 번거롭습니다.
해결 방법 2: 한정자(?, +, *, { })를 사용하여 특정 문자의 연속 발생 일치를 완료합니다. 일반 객체/d{6}/gi.
점 문자(.)를 한정자와 함께 사용하면 지정된 숫자 범위의 모든 문자와 일치할 수 있습니다.
Regular는 지정된 범위 내의 문자를 일치시킬 때 탐욕적 일치와 지연 일치를 지원합니다.
정규 표현식에서 괄호 문자 "()"로 묶인 내용을 "하위 표현식"이라고 합니다.
괄호는 catch와 cater의 매칭을 구현하며, 괄호를 사용하지 않으면 catch와 er
그룹화되지 않은 경우 2개의 c 문자 매칭을 의미합니다. ;그룹화한 후에는 "bc" 문자열 2개를 일치시킨다는 뜻입니다.
캡처: 하위 표현식과 일치하는 콘텐츠를 시스템 캐시 영역에 저장하는 프로세스입니다.
비캡처: 하위 표현식의 일치하는 콘텐츠를 시스템 캐시에 저장하지 말고 (?:x)를 사용하여 이를 달성하세요.
String对象的replace()方法,可直接利用$n(n是大于0的正整数)获取捕获内容,完成对子表达式捕获的内容进行替换的操作。
可以使用”(?:x)”的方式实现非捕获匹配
在编写正则表达式时,若要在正则表达式中,获取存放在缓存区内的子表达式的捕获内容,则可以使用“\n”(n是大于0的正整数)的方式引用,这个过程就是“反向引用”。
零宽断言:指的是一种零宽度的子表达式匹配,用于查找子表达式匹配的内容之前或之后是否含有特定的字符集。
分类:分为正向预查和反向预查,但是在JavaScript中仅支持正向预查,即匹配含有或不含有捕获内容之前的数据,匹配的结果中不含捕获的内容。
正则表达式中的运算符有很多。在实际应用时,各种运算符会遵循优先级顺序进行匹配。正则表达式中常用运算符优先级,由高到低的顺序如下表。
【案例】内容查找与替换
代码实现思路:
代码实现
nbsp;html> <meta> <title>内容查找与替换</title> <style> p{float:left;} input{margin:0 20px;} </style> <p>过滤前内容:<br> <textarea></textarea> <input> </p> <p>过滤后内容:<br> <textarea></textarea> </p> <script> document.getElementById('btn').onclick = function () { // 定义查找并需要替换的内容规则,[\u4e00-\u9fa5]表示匹配任意中文字符 var reg = /(bad)|[\u4e00-\u9fa5]/gi; var str = document.getElementById('pre').value; var newstr = str.replace(reg, '*'); document.getElementById('res').innerHTML = newstr; }; </script>
相关推荐:javascript学习教程
위 내용은 JavaScript 정규식, 이 글이면 충분합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!