js에서 정규식은 RegExp 개체로 표현됩니다. RegExp는 정규식의 약어입니다. RegExp 단순 패턴은 단일 문자일 수 있습니다. 더 복잡한 패턴에는 더 많은 문자가 포함되며 구문 분석, 형식 확인, 대체 등에 사용될 수 있습니다. RegExp() 생성자를 사용하여 RegExp 개체를 만들 수도 있고,
직접 구문을 사용할 수도 있습니다. js에서 정규식은 RegExp 개체로 표현되며, RegExp는 정규식의 약어입니다. RegExp 단순 패턴은 단일 문자일 수 있습니다. 더 복잡한 패턴에는 더 많은 문자가 포함되며 구문 분석, 형식 확인, 대체 등에 사용될 수 있습니다. RegExp() 생성자를 사용하여 RegExp 개체를 만들거나 리터럴 구문을 사용할 수 있습니다.
1. RegExp 소개.
RegExp는 단일 문자열을 사용하여 일련의 규칙을 설명하고 일치시키는 정규식(정규식, 종종 코드에서 regex, regexp 또는 RE/re/reg로 축약됨)입니다. 특정 구문을 준수하는 문자열 검색 모드, 검색 모드는 텍스트 검색 및 텍스트 교체에 사용될 수 있습니다.
정규 표현식은 텍스트의 데이터를 검색할 때 검색 패턴을 사용하여 쿼리하려는 내용, 즉 정규 표현식을 사용할 수 있습니다. 표현식은 문자에 대한 설명입니다. 패턴 개체는 문자열 패턴을 일치시키고 검색하고 바꾸는 데 사용할 수 있습니다. 문자열에 대한 패턴 일치를 수행하는 강력한 도구입니다.
소위 정규 표현식은 규칙이나 패턴 표현으로 직접적으로 이해될 수 있는데, 이는 컴퓨터가 이해할 수 있는 특정 규칙을 표현하지만, 일반인이 이해하기 어려운 텍스트 표현일 수 있습니다. 모든 텍스트 검색에 사용되며 텍스트 교체 작업은 단순히 문자열을 처리하는 것입니다.
2. 문자열 방식.
(1), charAt() 특정 문자를 가져와 문자열에 있는 특정 문자를 반환합니다.
(2), Split() 문자열을 분할하여 배열을 얻습니다.
(3), search() 특정 문자가 처음 나타나는 위치를 찾는다. 정규식과 함께 사용하는 것이 좋다. 찾지 못한 경우에는 -를 반환한다. 1.
(4), match() 문자열에서 지정된 문자를 찾아서 해당 문자를 반환합니다. 정규식을 사용하지 않으면 지정된 문자가 처음 나타나는 부분만 반환되며, 해당 문자는 반환되지 않습니다. 추가 일치를 사용하고 전역 일치를 수행하는 경우 문자열에 지정된 모든 문자가 배열 형식으로 반환되거나 찾을 수 없는 경우 null이 반환됩니다.
(5), replacement() 문자를 바꾸고 새 문자열을 반환합니다. 정규식과 함께 사용하는 것이 더 좋으며 모든 일치 항목을 바꿀 수 있습니다.
<script>
var str='abcdefgca';
//返回字符串中某一位的字符。
alert(str.charAt()); //返回:d
//查找字符串首次出现的位置。
alert(str.search('z')); //返回:-
//查找指定的字符。
//只返回第一次出现的c,不再向后匹配。
alert(str.match('c')); //返回:c
//将'a'替换为'i'。
//只替换了第一个位置的a,不再向后匹配。
alert(str.replace('a', 'i')); //返回:ibcdefgca
//分割字符串。
var str='--aaa--cd';
var arr=str.split('-'); //返回:,,aaa,,cd
alert(arr);
</script>
로그인 후 복사
예: 일반적인 방법을 사용하여 문자열에 있는 모든 숫자를 찾습니다.
구현 아이디어: 문자 문자열의 숫자는 실제로 어렵지 않습니다. 문자열에서 숫자를 먼저 추출한 다음 문자열에 숫자가 두 개 이상 있어야하므로 추출된 숫자 문자를 저장하려면 빈 문자열이 필요합니다. 숫자 문자가 배열에 추가되고 최종적으로 반환되면 그게 전부입니다. 프로그램이 어떻게 구현되는지 살펴보겠습니다.
<script>
var str=' abc d aa c zz -=-=s-';
var arr=[];
var num='';
//首先循环遍历字符串
for(var i=;i<str.length;i++){
//再判断当前字符大于等于并且小于等于,则为数字
if(str.charAt(i)>='' && str.charAt(i)<=''){
//那么就将当前的字符存储在空字符串中
num += str.charAt(i);
}
else{
//如果字符串中有值。
if(num){
//将值添加到数组中。
arr.push(num);
//再清空字符串,避免重复添加。
num='';
}
}
}
//最后在整个字符串结束之后有可能还会有数字,再做一次判断。
if(num){
//如果还有值就添加到数组中。
arr.push(num);
//再清空字符串。
num='';
}
//返回:OK,现在返回就完成了。
alert(arr); //返回:,,,,,,,
</script>
로그인 후 복사
일반적인 방법으로 완성할 수 있고 구조도 명확하지만, 정규식을 사용하면 코드가 상대적으로 길어집니다. 표현식은 많은 작업을 수행했으며 매우 편리합니다. 정규 표현식을 사용하는 방법을 살펴보겠습니다.
3. 규칙적인 규칙을 사용하세요.
정규식 구문: var re = new RegExp('pattern', 'modifier');
패턴은 표현식의 패턴이며 수정자는 다음을 지정하는 데 사용됩니다. 전역 일치, 대소문자 구분 등 전체 형식은 정규식입니다.
이렇게 정규 구문을 보면 JS에서 새로 생성되는 객체의 일반적인 구문이 아닌가요? 그런데 새로운 일반 객체를 생성한다는 뜻이죠. new 키워드를 사용하지 말아야 한다는 것은 모두가 알고 있는 사실입니다. new를 사용하면 의심할 여지 없이 새로운 개체가 생성되며, 이는 또한 일정량의 메모리 공간을 차지한다는 것을 의미합니다. 제대로 처리하지 않으면 과도한 축적으로 인해 메모리 오버플로가 발생합니다. 리소스가 코드 최적화 구현에 도움이 되지 않습니다. 동시에 이러한 작성 방식은 규칙성의 힘을 반영하지 않으므로 매우 간결해야 하므로 실제 사용에서는 다음과 같은 다른 스타일을 사용하지 않습니다. 🎜>
구문: var re = /mode/modifier; 이 스타일은 비교적 간결하며 대부분의 사람들이 이해할 수 없는 표현입니다. (1) 수식어. 수정자는 전역 일치 및 대소문자 구분을 수행하는 데 사용됩니다. 대소문자 무시: i(ignore의 약어, 중국어 번역:ignore) 글로벌 일치: g(global의 약어, 중국어 번역: all/global)
예: 지정된 문자에 대한 전역 검색
<script>
var str='AbCdEFgiX';
//JS风格:
//这个正则表达式什么也不代表,只代表abc本身。
var reg=new RegExp('abc', 'i');
alert(str.match(reg)); //返回:AbC
//常用风格:
var re=/efg/i;
alert(str.match(re)); //返回:EFg
</script>
로그인 후 복사
4, 대괄호 및 메타 문자.
(1) 대괄호. 대괄호는 특정 범위 내의 문자를 찾는 데 사용됩니다.
①. 임의의 문자 표현: [abc] 대괄호 안의 문자를 찾습니다. [] 여기서는 또는 즉, 나타나는 것이 무엇이든 가능하다는 의미입니다.
아아앙
②、范围查找。
表达式:[0-9] [a-z] [A-z] [A-Z]
[0-9] 查找任意 0 - 9 的数字。
[a-z] 查找任意 a - z 的字符。
[A-z] 查找任意 大写A - 小写z 的字符。
[A-Z] 查找任意 大写A - 大写Z的字符。
③、排除查找。
表达式:[^abc] [^a-z] [^0-9]
[^abc] 查找任意不在方括号中的字符。
[^a-z] 查找任意除了字母以外的字符,包括数字符号中文外文。
[^0-9] 查找任意除了数字以外的字符,包括字母符号中文外文。
<script>
var str='ot out o.t o t o`t ot ot';
//o和t中间除了数字,什么都可以
var re=/o[^-]t/g;
alert(str.match(re)); //返回:out,o.t,o t,o`t
</script>
로그인 후 복사
④、选择查找。
表达式:(a|b|c)
查找任何指定的选项,a或b或c。
⑤、匹配还可以使用组合模式,比如:[a-z0-9A-Z] [^a-z0-9]
[a-z0-9A-Z] 任意大小写字母和数字。
[^a-z0-9] 除了字母和数字以外,什么都可以。
(2)、元字符。
元字符是拥有特殊含义的字符,也可以叫做转义字符。
下面是一些常用的元字符:
메타문자
설명
사용
.
은 개행 문자와 줄 종결자를 제외한 모든 문자를 나타내는 단일 문자를 찾습니다.
문제가 발생하기 쉬우므로 사용하지 않는 것이 좋습니다.
w
[a-z0-9]에 해당하는 영어 숫자와 밑줄을 포함한 단어 문자를 찾습니다.
/w/
W
는 단어가 아닌 검색 문자, [^a-z0-9]
/W/
d<와 동일 🎜>
[0-9]에 해당하는 숫자 찾기
/d/
D
[^0-9]에 해당하는 숫자가 아닌 숫자 찾기
/D/
s
공백, 캐리지 리턴 및 탭 문자를 포함한 공백 문자 찾기 , 줄 바꿈 문자, 폼 피드 문자 및 인쇄할 수 없는 문자는 표시할 수 없습니다.
/s/
S
공백이 아닌 찾기 문자 .
/S/
b
찾는 단어 찾기 시작 또는 끝 부분에서 일치하거나 일치하는 항목이 없으면 null입니다.
/b/
B
찾기 비단어 경계 매칭, 즉 시작이나 끝에 위치하지 않고, 매칭 위치의 이전 문자와 다음 문자의 유형이 동일합니다. 즉, 둘 다 단어여야 합니다.
또는 동일해야 합니다. 단어가 아닌 경우 문자열의 시작과 끝은 단어가 아닌 문자로 처리됩니다. 일치하는 항목이 없으면 null이 반환됩니다.
/B/
n
개행 문자가 있으면 찾습니다. then 위치를 반환하고, 찾을 수 없으면 -1을 반환합니다.
/n/
f
폼 피드 문자 찾기 .
/f/
r
캐리지 리턴 찾기 성격 .
/r/
t
탭 문자 찾기 .
5. 수량자.
소위 수량자란 수량자, 즉 숫자를 의미하는 것으로 정규 표현식에서 발생 횟수를 표현하는 데 사용됩니다.
다음은 일반적으로 사용되는 수량사입니다.
정량자
설명
사용
*
0번 또는 언제든지, {0,}과 동일
권장하지 않음 , 범위가 너무 넓고 정확하지 않습니다.
?
0 또는 1회, {0, 1}과 동일
/10?/g는 바로 뒤에 오는 0 또는 1 '0'을 포함하여 1에 대한 전역 검색을 수행합니다.
+
한 번 또는 여러 번, {1, }
과 동일
/w+/g 하나 이상의 단어에 대해 전체 검색을 수행합니다.
{n}
정확히 n번
/d {4}/g는 4자리 숫자에 대한 전역 검색을 수행합니다.
{n,}
n회 이상, 제한 없음
/d{3,}/g는 최소 3자리 숫자가 포함된 숫자에 대해 전역 검색을 수행합니다.
{n, m}
n회 이상, 최대 m회
/d{3,4}/g 세 자리 또는 네 자리 숫자가 포함된 숫자에 대해 전역 검색을 수행합니다.
다음은 일반적으로 사용되는 일치 패턴입니다.
모드
설명
사용
^a
a로 시작하는 문자는 줄의 시작을 의미합니다
/^d / 숫자로 시작 /^a/g 'a'로 시작하는 문자 전역 검색
a$
로 끝나는 모든 문자는 줄의 끝을 나타냅니다.
/d$/ 숫자로 끝남 /z$/g 'z'로 끝나는 문자에 대한 전역 검색
? = a
a가 뒤에 오는 모든 문자
/a(?= b)/g 'a' 뒤에 'b가 오는 전역 검색 ' 문자
?!a
뒤에 a
<가 오지 않는 문자 🎜>
/c(?= d)/g 'c' 다음에 'd'가 오지 않는 문자에 대한 전역 검색
6、字符串和正则配合。
(1)、search()配合正则
实例:找出字符串中第一次出现数字的位置
<script>
var str='asdf zxcvbnm';
//元字符\d,表示转义为数字
var re=/\d/;
alert(str.search(re)); //返回: 第一个数字为出现在第位
</script>
<script>
var str='asdf zxcvm';
//找出字符串中的数字可以使用元字符\d
var re=/\d/;
//没告诉系统要找多少数字,系统在找到数字后就返回
alert(str.match(re)); //返回:
//因此需要全局匹配,使用修饰符g
var re=/\d/g;
//没告诉系统要找几位,系统会将所有找到的数字返回
alert(str.match(re)); //返回:,,,,,,,,,,,,
//所以可以使用两个元字符,告诉系统要找的数字是位
var re=/\d\d/g;
//显然这样是不可取的,因为数字的位数并不固定,可能是位,有可能还是多位
alert(str.match(re)); //返回:,,,,
//所以需要用到量词+,+代表若干,也就是多少都可以。
var re=/\d+/g;
//现在返回正确。
alert(str.match(re)); //返回:,,,,
</script>
로그인 후 복사
实例:使用正则找出字符串中所有数字
<script>
var str=' abc d aa c zz -=-=s-';
//alert(str.match(/\d+/g));
//元字符\d也可以使用[-]代替,到随便哪个都行。
alert(str.match(/[-]+/g)); //返回:,,,,,,,
</script>
로그인 후 복사
正则是强大的字符串匹配工具,就这样简单的使用一句代码就完成了。
(3)、replace()配合正则
<script>
var str='abc zaaz deaxcaa';
//将字符串中的a替换为数字
alert(str.replace('a', )); //仅仅只将第一个a替换为
//配合正则使用匹配所有a再替换
var re=/a/g;
alert(str.replace(re, '')); //返回所有的a都为
</script>
调用 RegExp 对象 re 的 test() 方法,并为它传递字符串str,与这个表示式是等价的:(re.exec(str) != null)。
实例:搜索字符串是否含有指定的字符
<script>
var str='The best things in life are free, like hugs, smiles, friends, kisses, family, love and good memories.';
var re=/i/;
alert(re.test(str)); //返回:true
var reg=/z/;
alert(reg.test(str)); //返回:false
//上面的代码可以不用定义正则的变量,直接使用,将两行合并为一行。
alert(/i/.test(str));
alert(/z/.test(str));
</script>
<script>
var str = 'good good study day day up';
var re = /good/;
var arr = re.exec(str);
console.log(arr); //控制台显示:["good"]点开后显示: "good",index ,input "good good study day day up"。
console.log(arr.index); //控制台显示:
console.log(arr.input); //控制台显示:good good study day day up
</script>
<script>
var str = 'good good study day day up';
var re = /g(o+)d/;
var arr = re.exec(str);
console.log(arr); //显示:["good", "oo"]点开后显示: "good", "oo", index ,input: "good good study day day up"
console.log(arr.length); //显示:
var reg = /(o+)/;
//var reg = /o+/; 只返回一个"oo",长度为
var arr = reg.exec(str);
console.log(arr); //显示:["oo", "oo"]点开后显示: "oo", "oo", index ,input: "good good study day day up"
console.log(arr.length); //显示:
</script>
<script>
var str = 'good good study day day up';
var re = /good/g;
var arr;
do{
arr = re.exec(str);
console.log(arr);
console.log(re.lastIndex);
}
while(arr !== null)
/*
结果如下:
显示:["good"],点开后: "good", index , input "good good study day day up"。
lastIndex为。
显示:["good"],点开后: "good", index , input "good good study day day up"。
lastIndex为。
显示:null
lastIndex为。
*/
</script>
<script>
var str = 'good good study day day up';
var re = /good/g;
var arr;
while((arr = re.exec(str)) != null){
console.log(arr);
console.log(re.lastIndex);
}
/*
结果如下:
显示:["good"],点开后: "good", index , input "good good study day day up"。
lastIndex为。
显示:["good"],点开后: "good", index , input "good good study day day up"。
lastIndex为。
*/
</script>
<script>
var str = 'Today is a beautiful day, Day day happy!';
var re = /day/gi;
var str = str.replace(re, '天');
console.log(str); //输出:To天 is a beautiful 天, 天 天 happy!
reg = /(to)?day/gi;
reg.compile(reg);
str = str.replace(reg, '日');
console.log(str); //输出:日 is a beautiful 日, 日 日 happy!
</script>
这么说起来正则表达式貌似很简单的样子,其实挺难的,why are you so diao?归根结底就是这种一般人很难看懂的表达方式,自己当时写的时候很明白表达的是什么,过段时间回头,哎哟我去,怎么不认识了。其实这是一个熟能生巧的过程,记得有篇课文中写到“好记性不如烂笔头”,勤能补拙,多动手多写多思考,通过码海战术,反复推敲代码,让自己身经百战,见的多了,自然就不虚了,编程是一门艺术,精通任何一门艺术,都需要大量的练习和领悟,知识就是一个积累的过程,当然更重要的还是要自己去总结归纳,让知识真正属于自己。我觉着写程序这东西吧,最重要的还是思维,让代码始终跟着这种思维走,目的只有一个,怎么简单怎么省事怎么做,当然不是偷工减料,要明白需要什么,不需要什么,要呈现出什么样的效果,应该怎么去一步步实现,只要有这种实现目的的思维,就可以让代码始终保持着清晰简洁的状态,加快编写代码的效率,还有助于排错,也有利于代码的优化。那个好像扯太远了,每个人都有自己思考问题的方式,有不同的做事风格,只要最优化解决问题就好了,回到正事,接下来看看正则表达式应用的两个实例。
var someText= "web2.0 .net2.0" ;
var pattern=/(\\w+)(\\d)\\.(\\d)/g;
var outCome_exec=pattern.exec(someText); ["web2.0","web","2","0"]
var outCome_matc=someText.match(pattern); ["web2.0","net2.0"]
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));
patt1.compile("d");
document.write(patt1.test("The best things in life are free"));
로그인 후 복사
8、关于$0~$99的例子
JScript 代码
var str="alert.login.verifyfailed=Your email or password is incorrect!";
var reg=/^alert.\\w*(.\\w*)=((?:\\w*[ !\\.])*)$/;
var out=str.match(reg);
console.info($0);
로그인 후 복사
9、测试RegExp属性
JScript 代码
function demo(){
var str = "abcdd abcsszabcdddccabAbcddABCEE";
var regex = /a(bc)/gi;
var t = null;
while(t = regex.exec(str)){
var result = "index = " + t.index + ", match = " + t[0] + ", group = " + t[1];
result += "/n$1=" + RegExp.$1 + ", lastMatch=" + RegExp.lastMatch + ", leftContext=" + RegExp.leftContext;
alert(result);
}
}