正则表达式了解和使用

<!doctype html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>正则表达式</title>

<script type="text/javascript">

/*------正则表达式本身就是一种语言,在编程语言里是通用的.

*一 概念:

正则表达式(regular expression)描述了一种字符串匹配的‘模式‘,可以用来检查一个串是否含有某种子串,将匹配的子串做‘替换’或者从某个串中取出符合‘某个条件’的子串等。

str.indexOf(‘abc‘); 精确匹配------》只能查找初abc

正则表达式        : 模糊匹配

《类似》

select*from 表 where name="张三";      //精确匹配  找出张三所属的信息。

select*from 表 where name like ‘张%‘; //模糊匹配  找出以张开头的所属信息。

二:正则对象

要使用正则表达式,必须要在程序中创建正则对象

1:如何创建正则对象(需要得到一个RegExp类的实例)

第一种:隐式创建(好理解)

var 对象 = /匹配模式/匹配标志;

第二种:显示创建

var 对象 = new RegExp(匹配模式,匹配标志);

两种方法的区别:

var reg=/\d/gi;

如果使用直接实例化,那么像‘\d‘这样的字符,需要转义‘\\d‘;

var reg=new RegExp(‘\\d‘,‘gi‘);

《《如何使用这个对象?????

var arr="Hello World";

var reg=new RegExp(‘/e/‘,‘gi‘);

console.log(typeof(reg));

console.log(reg.constructor);

2:匹配标志:

g:全局匹配

i:忽略大小写

三:使用正则对象

在js中,使用正则对象主要有两种用法:

1:RegExp类

test(str): 匹配指定的模式是否出现在字符串中.

exec(str): 返回匹配模式的字符串.

2:String类

search   :匹配符合匹配模式的字符串出现的位置.

match    :返回匹配模式的字符串(以数组形式),没有匹配到则为null.

replace  :使用指定的内容替换匹配模式的字符串

str.replace(reg,‘content‘);

reg:正则对象

content:替换的内容

split:使用匹配模式的字符串做为分割符,对字符进行分割,返回数组.

不同情况下使用不同的方法:

如:

邮箱格式,手机格式,IP格式合不合法,用text。

抓取网页中所有的手机号,使用exec或match。

替换掉网页中敏感词汇,用replace。

四:几个重要的概念

子表达式:在正则匹配模式中,使用一对括号包裹起来的内容是一个子表达式.

捕获:在正则匹配模式中,子表达式匹配到的内容会被系统捕获至系统的缓冲区中。

反向引用:捕获之后,可以在匹配模式中,使用\n(n:数字)来引用系统的第n号缓冲区的内容。

例子:

匹配3个数字前面的字符和后面的字符相同。

var str = ‘kkkkjava123javabasafjavascript456javascriptafafpha789php‘;

var reg = /(\w+)\d\d\d\1/gi;

var result = str.match(reg);

alert(result);

查找连续的四个数字

var str = ‘asfsafsafsa1234afasfsaf5668afsafsaf78‘;

var reg = /\d\d\d\d/gi;

var result=str.match(reg);

alert(result);

//查找四个连续相同的数字

var str=‘1111asadsad5555114228‘;

var reg= /(\d)\1\1\1/gi;

var result=str.match(reg);

alert(result);

//查找数字 1221 3443

var str=‘122155444443443666554557‘;

var reg= /(\d)(\d)\2\1/gi;

var result=str.match(reg);

alert(result);

//查找四个连续相同的数字或者字符

var str=‘aaaa1111afsAAsafasAAafas5555‘;

var reg= /(\w)\1\1\1/gi;

var result=str.match(reg);

alert(result);

//匹配字符 AABB

var str=‘AABBCCDDasfsafaabb‘;

var reg= /([A-Z])\1([A-Z])\2/gi;

var result=str.match(reg);

alert(result);

一般情况下,后面的内容要求与前面的一致,就会用到子表达式,捕获,反向引用。

var str = ‘adad<div>商品</div>asdsa<span>sasad</span>fff<p></p>‘;

//特殊符号需要转义  /----->\/   .------>除了/n之外的任意字符

var reg =/<(\w+)>.*<\/\1>/gi;

var result =str.match(reg);

alert(result);

五.正则语法细节

正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符进行匹配.

1):普通字符:a,b,1,2...

2): 特效字符(元字符):\d\D\w...

在写正则表达式之前,我们需要确定这样几件事。

1)要‘查’什么.

2) 要‘从那开始’查.

3) 要查‘多少’.

---1:限定符

限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

*   匹配前面的子表达式零次或多次. {0,}

+   匹配前面的子表达式一次或多次. {1,}

?     匹配前面的子表达式零次或一次. {0,1}

{n} 匹配确定的n次

{n,} 至少匹配n次

{n,m}   最少匹配n次且最多匹配m次

注意:既可以匹配到n个,又可以匹配到m个时,正则表达式会自动匹配到多的那一种,这在正则中叫做贪婪匹配原则。

var str ="sasadsa123456789";

var reg =/\d{3,5}/gi;

var result = str.match(reg);

alert(result);

但如果在表达式的后面使用‘?‘,表示非贪婪匹配原则,就会尽可能匹配少的。

var str ="sasadsa123456789";

var reg =/\d{3,5}?/gi;

var result = str.match(reg);

alert(result);

---2元字符---》(字符匹配符)

字符匹配符用于匹配某个或某些字符

字符簇:

[a-z]:表示a-z之间的任意一个字符

[A-Z]:表示A-Z之间的任意一个字符

[0-9]:表示0-9之间的任意一个数字

[0-9a-z]:。。。

[0-9a-zA-Z]:。。

[abcd]:。。

[^a-z]:取反,表示除了a-z之间任意一个字符

[^0-9]:。。。

[^abcd]:。。。

\d:匹配一个数字字符  [0-9]

\D:匹配一非数字字符  [^0-9]

\w:匹配包括下划线,大小写字母,数字。[a-zA-Z0-9]

\W:匹配任何非下划线,大小写字母,数字[^a-zA-Z0-9]

\s:匹配任何空白字符.

\S:匹配任何非空白字符.

.:匹配初‘\n‘之外的任何单个字符.[^\n]

----3:元字符-----》(定位符)【重要】

可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词开始或结尾出现的正则表达式.

^ :匹配输入字符串的‘开始位置’.

$ :匹配输入字符串的‘结束位置’.

\b :匹配一个单词边界

\B  :匹配非单词边界

var str =‘hello javascript java php mysql‘;

var reg =/^hello/gi;

var result=str.match(reg);

alert(result);  //匹配到了-----》hello

var str =‘javascript java php mysql hello‘;

var reg =/^hello/gi;

var result=str.match(reg);

alert(result);  //没有匹配到-----》null

----4:元字符------》(转义符)

\:用于匹配某些特殊字符

----5:元字符------》(选择匹配符)

|:可以匹配对个规则

----6:关于正则表达式的几种特殊用法

1):(?=) 正向预查

var str =‘hello,javassshello,javascriptffffhello,php‘;

//只想匹配后面为,javascript的hello

var reg =/hello(?=,javascript)/gi;

var result=str.match(reg);

alert(result);

2):(?!) 反向预查

var str =‘hello,javassshello,javascriptffffhello,php‘;

//匹配除了后面为,javascript的hello

var reg =/hello(?!,javascript)/gi;

var result=str.match(reg);

alert(result);

3):(?:) 匹配内容,但结果不会捕获

var str =‘hello,javassshello,javascriptffffhello,php‘;

//()---->在正则中是子表达式的意思,会被捕获。

var reg =/hello(?:,javascript|,php)/gi;

while(result =reg.exec(str)){

alert(result);

}

六:正则学习工具:页面实例

*/

</script>

<script type="text/javascript">

//未完成

function $(id){

return document.getElementById(id);

}

var  result =‘‘;

window.onload =function(){

var contentObj =$(‘content‘);

var regObj     =$(‘reg‘);

var resultObj  =$(‘result‘);

$(‘test‘).onclick =function(){

var str=contentObj.value;

var regt=regObj.value;

var reg=eval(‘/‘+regt+‘/gi‘);

if(reg==undefined){

resultObj.value=‘你输入的正则条件不合法!‘;

return;

}

var result =reg.test(str);

resultObj.value=result;

}

$(‘exec‘).onclick =function(){

var str=contentObj.value;

var regt=regObj.value;

var reg=eval(‘/‘+regt+‘/gi‘);

if(reg==undefined){

resultObj.value=‘你输入的正则条件不合法!‘;

return;

}

var arr=[];

while(result =reg.exec(str)){

arr.push(result);

}

resultObj.value=arr;

}

$(‘search‘).onclick =function(){

var str=contentObj.value;

var regt=regObj.value;

var reg=eval(‘/‘+regt+‘/gi‘);

if(reg==undefined){

resultObj.value=‘你输入的正则条件不合法!‘;

return;

}

var result = str.search(reg);

resultObj.value=result;

}

$(‘match‘).onclick =function(){

var str=contentObj.value;

var regt=regObj.value;

var reg=eval(‘/‘+regt+‘/gi‘);

if(reg==undefined){

resultObj.value=‘你输入的正则条件不合法!‘;

return;

}

var result = str.match(reg);

resultObj.value=result;

}

$(‘replace‘).onclick =function(){

}

$(‘split‘).onclick =function(){

}

}

</script>

</head>

<body>

内容: <input type="text" id="content" size=60/><br><br>

正则: <input type="text" id="reg"/ size=60><br><br>

结果: <textarea id="result" cols=‘50‘ rows=‘10‘></textarea><br><br>

<input type="button" id="test" value="test"/>

<input type="button" id="exec" value="exec"/>

<input type="button" id="search" value="search"/>

<input type="button" id="match" value="match"/>

<input type="button" id="replace" value="replace"/>

<input type="button" id="split" value="split"/>

</body>

</html>

				
时间: 2024-10-21 12:50:09

正则表达式了解和使用的相关文章

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

正则表达式中的逆向思维

人们的正常思维都是顺向的,那么逆向思维呢,特别是初学正则表达式的同学们,好不容易掌握了正则表达式的用法,再突然要你用逆向思维做题,会有很多不适应: 这里拿三道题,来做简单介绍: 1.经典例题取IP: [[email protected] ~]# ifconfig eth0|sed -nr '2s#^[^0-9]+(.*)[a-Z]{5,}.*#\1#gp' 10.0.0.200 2.调换/etc/passwd中最后一列和第一列的位置: [[email protected] ~]# head /p

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

前端学PHP之正则表达式函数

前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正则表达式函数 匹配与查找 [preg_match()] preg_match()函数用来执行一个正则表达式匹配,搜索subject与pattern给定的正则表达式的一个匹配.返回pattern的匹配次数.它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索.preg

正则表达式

grep命令和正则表达式 一. 正则 : 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"):2. 可以通过正则表达式,从字符串中获取我们想要的特定部分. 正则表达式和通配符一样,也是一组特殊符号,通配符是由sh

java中的正则表达式

正则表达式 : 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 一些字符所代表的意思: \        将下一字符标记为特殊字符.文本.反向引用或八进制转义符^       匹配输入字符串开始的位置$       匹配输入字符串结尾的位置.        匹配任何单个字符\s      空白(空格符.换行符.回车符.制表符)\S     非空白[]  

Python 正则表达式相关问题

这几天学习python,写正则表达式相关代码如下: import re print(re.search(r'(?<=<(\w+)>).*(?=<\/\1>)',"<b>ewuiiriur</b>sdksfkj").span()) 报错如下: raise error("look-behind requires fixed-width pattern")sre_constants.error: look-behind

7.python之正则表达式re模块

一.re模块的常用方法: re.findall() 用于返回一个字符串中,所有能被正则表达式所匹配到的字符串,以列表的方式返回. 用法re.findall(正则表达式,字符串). s1 = "sadjhjafdsajkhjsdaysadsadduayu" 比如说,想要从上面这一长串字符串中,匹配出a后面有一个任一字符在紧接着一个字母u的字符串. print re.findall('a.u',s1) >>>['ayu'] re.finditer()作用和findall一

JS中有关正则表达式的一些常见应用

总所周知,正则表达式主要用于字符串处理.表单验证等,简单的代码量实现复杂的功能 1.身份证号码的一个校验 先做一个简单的位数校验来判断身份证的合法性:(15位数字或18位数字或17位数字加X|x) var reg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(^\d|X|x)$)/ if(reg.test(num) === false){ alert("你输入的身份证不合法"); return false; } 18位=前六位地区+中八位出生日期+后4位顺序号(最后一

4-4 grep及正则表达式

1. grep:Globally search a Regular Expression and Print:根据模式搜索文本,并将符合模式的文本行显示出来 pattern:文本字符和正则表达式的元字符 一般查询 其中 -i:忽略大小写 --color: 另外,删掉alias,是以如下格式 -v:显示没有被模式匹配的行 -o:只显示被模式匹配到的字符串 2. 正则表达式:regular expression,简称REGXP 3. 位置锚空 ^: 锚空行道,此字符后的任意内容必须出现在行首 $: