js正则表明式学习和小结,js正则表达式速成人教育程

By admin in 4858美高梅 on 2019年4月1日

  原本小程序须求3个限量文本框输入为数字,且最多保留三位小数的效果,网上找到的事例感觉微微麻烦,就和好写了一个。

(推荐)JS正则知识点专题://www.jb51.net/article/139831.htm

日前在做一个小项目时用到了正则匹配,感觉正则挺好用的,所以打算抽时间来十分的小总计一下。

正则表明式是一种文本情势,蕴含普通字符(例如,a 到 z
之间的假名)和特殊字符(称为“元字符”)。格局描述在探寻文本时要合作的三个或多个字符串。RegExp
对象表示正则说明式,它是对字符串执行格局匹配的无敌区工作具。正则表明式是一种检索以及字符串替换操作。

新建正则说明式

方法壹:直接量语法

var reg = /pattern/attributes

主意2:创制 RegExp 对象的语法

 var reg = new RegExp(pattern, attributes);

参数表明:

参数 pattern 是三个字符串,钦赐了正则表达式的方式或其余正则表达式。
参数 attributes 是多个可选的字符串,包括属性 “g”、”i” 和
“m”,分别用于钦定全局匹配、区分轻重缓急写的杰出和多行匹配。ECMAScript
标准化在此之前,不协助 m 属性。借使 pattern
是正则表达式,而不是字符串,则必须省略该参数。

双面分别在于:
一.利用间接量语法新建的正则表明式对象在代码编写翻译时就会转移,是常常开发中常用的章程;
二.用到构造函数生成的正则对象要在代码运转时生成。

正则表明式使用:
正则对象的点子是指那样使用的: RegExp对象.方法(字符串)
字符串对象的措施是如此使用:字符串.方法(RegExp对象)

正则对象的性格和措施

属性

ignoreCase 重临布尔值,表示RegExp 对象是不是富有标志 i
global 重临布尔值,表示RegExp对象是或不是有所标志g
multiline 重返布尔值,表示RegExp 对象是还是不是享有标志 m。
lastIndex 一个平头,标识开端下三回匹配的字符地方
source 重返正则表明式的源文本(不蕴涵反斜杠)

i 执行对大小写不敏感的至极

g 执行全局匹配(查找全数匹配而非在找到第3个非凡后结束)。
m 执行多行匹配
正则表达式功能

万般用于二种职分:

1.验证
用以注解时,常常须求在前后分别增加^和$,以合作整个待验证字符串;

二.物色替换
寻找/替换时是不是丰裕此限制则根据查找的渴求而定,别的,也有希望要在左右加上\b而不是^和$

字符类匹配

[…] 查找方括号之间的别的字符
[^…] 查找任何不在方括号之间的字符
[a-z] 查找任何从小写 a 到小写 z 的字符
[A-Z] 查找任何从大写 A 到大写 Z 的字符
[A-z] 查找任何从大写 A 到小写 z 的字符
. 查找单个字符,除了换行和行甘休符
\w 查找单词字符,等价于[a-zA-Z0-9]
\W 查找非单词字符,等价于[^a-zA-Z0-9]
\s 查找空白字符
\S 查找非空白字符
\d 查找数字,等价于[0-9]
\D 查找非数字字符,等价于[^0-9]
\b 匹配单词边界
\r 查找回车符
\t 查找制表符
\0 查找 NULL 字符
\n 查找换行符

再也字符匹配

{n,m} 匹配前一项至少n次,但不能够超过m次
{n,} 匹配前一项n次或更频繁
4858美高梅,{n} 匹配前1项n次
n? 匹配前壹项0次或许三遍,也正是说前一项是可选的,等价于{0,壹}
n+ 匹配前1项贰回或频仍,等价于{壹,}
n* 匹配前1项0次或频仍,等价于{0,}
n$ 匹配任何结尾为 n 的字符串
^n 匹配任何开端为 n 的字符串
?=n 匹配任何其后交接内定字符串 n 的字符串
?!n 匹配任何其后并没有接通钦点字符串 n 的字符串

分外特定数字

^[1-9]\d*$    匹配正整数
^-[1-9]\d*$   匹配负整数
^-?[0-9]\d*$   匹配整数
^[1-9]\d*|0$  匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   匹配非正整数(负整数 + 0)
^[1-9]\d*.\d*|0.\d*[1-9]\d*$  匹配正浮点数
^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 匹配负浮点数
^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$  匹配浮点数
^[1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$  
匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$  匹配非正浮点数(负浮点数

  • 0)

合作特定字符串

^[A-Za-z]+$  匹配由二多少个英文字母组成的字符串
^[A-Z]+$  匹配由二陆个英文字母的大写组成的字符串
^[a-z]+$  匹配由二几个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  匹配由数字和2伍个英文字母组成的字符串
^\w+$  匹配由数字、2三个英文字母或然下划线组成的字符串

方法

test方法

寻找字符串中钦命的值。重返 true 或 false。
比方字符串 string 中隐含与 RegExpObject 匹配的文本,则赶回
true,不然重返 false。

Demo1:

只要正则表明式带有g修饰符,则每贰回test方法都从上1次匹配结束的义务上马匹配。

应用了g修饰符的正则表明式,表示要记录每二次搜索的岗位,接着使用test方法,每便起初搜索的职分都是上一回匹配的后一个职位。

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>test方法</title>
</head>
<body>
 <script type="text/javascript">
  var reg = /abc/g;
  var str = "123abc456abc";
  console.log(reg.lastIndex);//0
  console.log(reg.test(str));//true
  console.log(reg.lastIndex);//6
  console.log(reg.test(str));//true
  console.log(reg.lastIndex);//12
  console.log(reg.test(str));//false
 </script>
</body>
</html>

Demo2:

1经正则表达式是多个空字符串,则会合营全体的字符串,但须求运用new
RegExp()形式

 

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>test方法</title>
</head>
<body>
 <script type="text/javascript">
  console.log(new RegExp('').test('abc'));//true
  console.log(/''/.test('abc'));//false
  console.log(/''/.test("''"));//true
 </script>
</body>
</html>

 exec方法

exec() 方法用于检索字符串中的正则表明式的协作。

归来多少个数组,个中存放匹配的结果。借使未找到匹配,则再次回到值为 null。

Demo1:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>exec方法</title>
</head>
<body>
 <script type="text/javascript">
 var str = "xyz";
 var reg1 = /x/;
 var reg2 = /a/;
 var res1 = reg1.exec(str);
 var res2 = reg2.exec(str);
 console.log(res1);//["x", index: 0, input: "xyz"]
 console.log(res2);//null
 </script>
</body>
</html>

Demo2:

即便正则表明式包涵圆括号,则赶回的数组会包括多少个要素。首先是总体匹配成功的结果,后边是圆括号里匹配成功的结果,若是有多少个圆括号,他们的匹配成功的结果都会变成数组成分

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>exec方法2</title>
</head>
<body>
 <script type="text/javascript">
 var str = 'abcdabc';
 var reg = /(a)b(c)/;
 var res = reg.exec(str);
 console.log(res);//["abc", "a", "c", index: 0, input: "abcdabc"]
 </script>
</body>
</html>

对于调用exec方法后回到的数组具有以下四个属性:

input 整个原待匹配的字符串
index 整个情势匹配成功的起第肆个人置
帮忙正则表明式的 String 对象的方法

search方法

search()
方法用于检索字符串中钦赐的子字符串,或探寻与正则表达式相匹配的子字符串。

再次来到值: stringObject 中首先个与 regexp 相匹配的子串的苗头地方。

诠释:如果没有找到别的匹配的子串,则赶回 -1。

search() 方法不履行全局匹配,它将忽略标志 g。它同时忽略 regexp 的
lastIndex 属性,并且一连从字符串的发端展开搜索,那象征它总是回到
stringObject 的首先个门道11分的岗位。

Demo:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>search方法</title>
</head>
<body>
 <script type="text/javascript">
 var str = "abcdcef";
 console.log(str.search(/c/g));//2
  </script>
</body>
</html>

match方法

match()
方法可在字符串内寻找钦命的值,或找到叁个或五个正则表明式的同盟。该办法类似
indexOf() 和 lastIndexOf(),不过它回到内定的值,而不是字符串的岗位。

字符串对象的match方法与正则对象的exec方法相比较像样:

而是如若正则表明式带有g修饰符,那么match方法与exec方法就大相径庭了:

可以看来match重临了具备成功匹配的结果,不过exec方法只回去了3个。
Demo:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>match方法</title>
</head>
<body>
 <script type="text/javascript">
 var str = "abcd";
 var reg1 = /a/;
 var reg2 = /x/;
 console.log(str.match(reg1));//["a", index: 0, input: "abcd"]
 console.log(str.match(reg2));//null

 var str = "abcdabc";
 var reg = /a/g;
 console.log(str.match(reg));//["a", "a"]
 console.log(reg.exec(str));//["a", index: 0, input: "abcdabc"]
  </script>
</body>
</html>

replace方法

replace()
方法用于在字符串中用一些字符替换另1对字符,或沟通三个与正则表明式匹配的子串。

重临值:两个新的字符串,是用 replacement 替换了 regexp
的首先次匹配或享有匹配之后得到的。

字符串 stringObject 的 replace() 方法执行的是摸索并替换的操作。它将在
stringObject 中搜寻与 regexp 相匹配的子字符串,然后用 replacement
来替换这个子串。假设 regexp 具有全局标志 g,那么 replace()
方法将替换全体匹配的子串。不然,它只替换第三个匹配子串。

Demo:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>replace方法</title>
</head>
<body>
 <script type="text/javascript">
 var str = "xxx";
 console.log(str.replace('x','y'));//yxx
 console.log(str.replace(/x/,'y'));//yxx
 console.log(str.replace(/x/g,'y'));//yyy
  </script>
</body>
</html>

replace方法中特殊字符替换

4858美高梅 1

Demo:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>replace中的特殊字符替换</title>
</head>
<body>
 <script type="text/javascript">
 //用子表达式替换:$1和$2
 //正则表达式中()就是一个子表达式,$1对应是第一个表达式的内容,即java,$2为script
 var str = "javascript";
 console.log(str.replace(/(java)(script)/,'$2$1')); //输出:scriptjava 
 //$& 为正则表达式匹配的字符串
 //正则表达式通过直接量java来匹配,匹配结果为java,则 $&的值为java,然后用字符串$&-来替换匹配的字符串
 var str1 = "javascript";
 console.log(str1.replace(/java/,'$&-')); //输出:java-script

 var str2 = "javascript";
 // $`为匹配子串ava的左侧文本,则为j
 console.log(str2.replace(/ava/,"$`")); //输出:jjscript
 // $'为匹配子串ava的右侧文本,则为script
 console.log(str2.replace(/ava/,"$'")); //输出:jscriptscript
 // $$为直接量符号,即插入一个$符号
 console.log(str2.replace(/ava/,"$$"));//输出:j$script
 </script>
</body>
</html>

replace的参数replacement是函数

match 为匹配整个字符串,即:xyz4567八%$&^
a1 为率先个头表明式,([^\js正则表明式学习和小结,js正则表达式速成人教育程。d]*),匹配0个或多少个非数字的字符,即:xyz
a二 为第一身材表明式,(\d*),匹配0个或三个的数字,即:4567八
a三 为第四个子表明式,([^\w]*),匹配0个或协作任何非单词字符。等价于
[^A-Za-z0-9_],即 %$&^
index为形式匹配出现的任务,从第一个字符已经万分成功,则地点为0
string为字符串自个儿,即 xyz45678%$&^

Demo:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>replace的参数replacement是函数</title>
</head>
<body>
 <script type="text/javascript">
function replacer(match, a1, a2, a3, index, string) {
 return [a1, a2, a3].join(' ~ ');
}
 var str = 'xyz45678%$&^';
 var reg = /([^\d]*)(\d*)([^\w]*)/
var res = str.replace(reg, replacer); 
console.log(res);//xyz ~ 45678 ~ %$&^
 </script>
</body>
</html>

split方法

split(‘字符串的分割正则’,’重回数组的最大成员数’);再次来到分割后各部分构成的数组
Demo:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>split方法</title>
</head>
<body>
 <script type="text/javascript">
 var str = 'a,b , c,d';
 var res = str.split(",");//以逗号来分割字符串
 console.log(res);//["a", "b ", " c", "d"]

 var str1 = 'a,b , c,,d';
 var res1 = str1.split(/,*/);//以0或多个逗号来分割字符串
 console.log(res1);//["a", "b", " ", " ", "c", "d"]

 var str2 = 'a, b,c, d';
 var res2 = str2.split(/, */);//以0或对个逗号空格来分割字符串
 console.log(res2);//["a", "b", "c", "d"]

 var str3 = 'a, b,c, d';
 var res3 = str3.split(/, */,2);//以0或对个逗号空格来分割字符串,同时限制返回数组中最多有两项
 console.log(res3);//["a", "b"]
  </script>
</body>
</html>

能够转换正则的合营规则来分割字符串。

上边正则的卓殊规则是以0或多个x来举办划分,借使加上括号则括号匹配的有些也正是分开规则也会作为数组成员重回。

Demo2:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>split方法2</title>
</head>
<body>
 <script type="text/javascript">
 var str = "x@@xx@xx@@";
 var res = str.split(/x*/);//以0或者对个x为分隔符
 console.log(res);//["", "@", "@", "@", "@", "@"]

 var res1 = str.split(/(x*)/);//如果加上括号则括号匹配的部分也就是分割规则也会作为数组成员返回
 console.log(res1);//["", "x", "@", "", "@", "xx", "@", "xx", "@", "", "@"]
  </script>
</body>
</html>

正则表明式的1部分利用

一.字符串中冒出次数最多的字符

var re = /(\w)\1+/g;
(\w)外面的圆括号表示分组,\1象征重复第二分组中的内容 ,\1+表示
\w匹配到的字符重复n次,前面包车型客车g表示执行总体轮换

str.replace的第三个参数是个函数,参数a表示全部匹配到的字符串,b表示第三捕获分组也正是出现重复的单个字符
,将a.length 与已经记录 过的最多重复num相比,要是a.length
更大,就将它赋值给num,用value记录重复字符
b,这几个函数重回的是替换文本,但那边未有再次来到值,也正是说替换
为空,每一次替换这么些函数都被实施

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>字符串中出现次数最多的字符</title>
</head>
<body>
<script type="text/javascript">
var str = 'mmmmmmmmaaammmmmmmmmbbbbsccc';
function most(str) {
 var arr = str.split('');
 str = arr.sort().join('');//将字符串按单个字符分割,然后排序组合,经过这一步,相同的字符就会排列到一起
 var reg = /(\w)\1+/g;
 var num = 0;
 var value = '';
 str.replace(reg, function (a,b) {
 // console.log(a);
  if (num<a.length) {
   num = a.length;
   value = b;
  }
 });
 return '出现次数最多的字符是' + value + '出现了' + num + '次';
}
console.log(most(str));
 </script>
</body>
</html>

二.从url中领到子域名

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>从url中提取子域名</title>
</head>
<body>
 <script type="text/javascript">
  var url = "http://www.abc.com";
  var reg = /[^.]+/;//匹配除了.之外的其他字符
  var res = reg.exec(url)[0].substr(7);
  console.log(reg.exec(url));//["http://www", index: 0, input: "http://www.abc.com"]
  console.log(res);//www
 </script>
</body>
</html>

三.给字符串加千分符

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <title>给字符串加千分符</title>
</head>
<body>
 <script type="text/javascript">
 var str = "12345678912312";
 function fn(str){
    var reg = /(?=(?!b)(\d{3})+$)/g;
    return str.replace(reg,',');
   }
   var res = fn(str);
   console.log(res);//12,345,678,912,312
 </script>
</body>
</html>

常用的正则表明式

合营国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}

如 0511-4405222 或 021-87888822

匹配QQ号:[1-9][0-9]{4,}

从10000开始

邮政编码:[1-9]\d{5}(?!\d)

邮编为八人数字

匹配身份证:/^(\d{14}|\d{17})(\d|[xX])$/

合营规则:身份证编号有一八人依然二十个人,当中最后一人或然是X,别的全是数字

匹配ip地址:\d+.\d+.\d+.\d+

匹配帐号是或不是合法(字母开首,允许伍-1陆字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{四,一5}$
表单验证时很实用

匹配中文字符: /[\u4E00-\u9FA5\uf900-\ufa2d]/

采用 Unicode,必须选用\u开始,接着是字符编码的几人1陆进制表现格局

匹配Email地址:

/^([a-zA-Z_0-9-])+@([a-zA-Z_0-9-])+(.[a-zA-Z_0-9-])+$/

邮箱的条条框框是: 由3局地组成

由3个也许七个假名数字下划线和杠 + @ + 2个可能四个假名数字下划线和杠 + .

  • 一个或许多少个字母数字下划线和杠

匹配网站UHavalL:[a-zA-z]+://[^\s]*

判断字符串是还是不是由数字组合: /^\d*$/

限制文本框只好输入数字和小数点(2人小数点):

/^\d*.?\d{0,2}$/

证实:起首有0个也许七个数字,(?表示匹配前一项0次大概屡屡)中间有0个可能二个小数点,小数点后边有0个只怕最多贰个数字

用户名正则: /^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/

匹配规则:只可以是华语,英文,数字,下划线,四-十六个字符

匹配中文字符正则:/[\u4E00-\u9FA5\uf900-\ufa2d]/

\w是 匹配英文,数字,下划线

匹配英文地址:/^[a-zA-Z][.a-zA-Z\s,0-9]*?[a-zA-Z]+/匹配规则:包蕴点,字母,空格,逗号,数字,可是开首和结尾必须为字母分析:伊始必须为字母可以这么写/[a−zA−Z]/结尾必须为字母能够这么写:/[a−zA−Z]+/

中档含有点,字母,空格,逗号,数字的正则:/[.a-zA-Z\s,0-9]*?/

外面的*号是0个要么多少个,后边的问号?
代表可有可无;有就合营,未有就不匹配;

匹配价格:/^\d*(.\d{0,2})?$/

匹配规则:
开端有0个大概多少个数字,中间也许有2个小数点,前边有希望有0-三人小数

单词的首字母大写:/\b(\w)|\s(\w)/g

证实日期格式:/^\d{4}[-\/]\d{1,2}[-\/]\d{1,2}$/

日子格式有2种 第一种是yyyy-mm-dd 或 yyyy/mm/dd

浅析:月和天数能够有一人或然三个人

以上正是小编为我们带来的js正则表明式学习和小结(非看不可篇)全体内容了,希望大家多多支持脚本之家~

在PHP中有两套正则表明式函数库。一套是由PCRE(Perl Compatible Regular
Expression)库提供的。PCRE库使用和Perl相同的语法规则完结了正则表明式的方式匹配,其利用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable
Operation System interface)扩展库提供的。POSIX扩大的正则表达式由POSIX
1003.二概念,1般选择以“ereg_”为前缀命名的函数。
两套函数库的机能相似,执行功效稍有差异。一般而言,达成平等的功能,使用PCRE库的效能略占优势。上面详细介绍其利用格局。
陆.三.1 正则表达式的非凡
1.preg_match()
函数原型:int preg_match (string $pattern, string $content [, array
$matches])
preg_match
()函数在$content字符串中找找与$pattern给出的正则表明式相匹配的剧情。假如提供了$matches,则将格外结果放入个中。$matches[0]将涵盖与成套情势匹配的公文,$matches[1]将涵盖第贰个捕获的与括号中的形式单元所匹配的始末,以此类推。该函数只
作一遍匹配,最后再次来到0或一的合营结果数。代码陆.一交付preg_match()函数的壹段代码示例。
代码陆.壹 日期时间的匹配

正则表明式能够:
•测试字符串的某部形式。例如,能够对1个输入字符串实行测试,看在该字符串是或不是留存贰个电话号码方式或2个信用卡号码形式。那称之为数据有效性验证
•替换文本。能够在文书档案中选择四个正则表明式来标识特定文字,然后能够整个将其删除,或许替换为别的文字
•根据方式匹配从字符串中提取一个子字符串。可以用来在文件或输入字段中找找特定文字

代码很不难,首要依靠了正则的组匹配特性进行处理:

你或然感兴趣的篇章:

  • JavaScript正则表明式校验非零的负整数实例
  • JavaScript正则表明式校验非负整数实例
  • JavaScript正则表达式校验非正整数实例
  • JavaScript利用正则表明式替换字符串中的内容
  • 行使js正则表达式校验正数、负数、和小数
  • JavaScript种类小说:详解正则表达式基本知识
  • JS正则表明式的验证
  • JS常用正则表明式及表达时间的正则表达式
  • js正则表明式验证U揽胜L函数代码(方便多少个正则比较)
  • js匹配网址url的正则表明式集合
  • JavaScript正则表明式校验非零的正整数实例

复制代码 代码如下:

 

//检查输入文本,限制只能为数字并且数字最多带2位小数
  checkInputText: function(text){

    var reg = /^(\.*)(\d+)(\.?)(\d{0,2}).*$/g;

    if (reg.test(text)) { //正则匹配通过,提取有效文本
      text = text.replace(reg, '$2$3$4');
    }
    else { //正则匹配不通过,直接清空
      text = '';
    }

    return text; //返回符合要求的文本(为数字且最多有带2位小数)
  }

<?php
//须要合营的字符串。date函数重返当前时光
$content = “Current date and time is “.date(“Y-m-d h:i a”).”, we are
learning PHP together.”;
//使用普通的点子匹配时间
if (preg_match (“/\d{4}-\d{2}-\d{2} \d{2}:\d{2} [ap]m/”,
$content, $m))
{
echo “匹配的时光是:” .$m[0]. “\n”;
}
//由于时间的格局显著,也能够简简单单的同盟
if (preg_match (“/([\d-]{10}) ([\d:]{5} [ap]m)/”, $content,
$m))
{
echo “当今天子是:” .$m[1]. “\n”;
echo “当前岁月是:” .$m[2]. “\n”;
}
?>

正则表达式语法:
三个正则表明式就是由1般性字符(例如字符 a 到
z)以及特殊字符(称为元字符)组成的文字方式。该情势描述在查找文字主体时待匹配的3个或多少个字符串。正则表明式作为2个模板,将有个别字符格局与所搜索的字符串举行匹配。

 

那是一个简便动态文本串匹配实例。借使当前系统时间是“200陆年三月1二七日一三点贰肆分”,将出口如下的始末。
杰出的时刻是:200陆-0八-17 0壹:25 pm
当明天期是:200陆-0八-17
脚下日子是:0①:二伍 pm
2.ereg()和eregi()
ereg()是POSIX扩张库中正则表达式的匹配函数。eregi()是ereg()函数的马虎大小写的版
本。2者与preg_match的意义周边,但函数再次回到的是1个布尔值,评释协作成功与否。须要评释的是,POSIX扩大库函数的首先个参数接受的是正则
表明式字符串,即不供给利用分界符。例如,代码6.二是一个关于文件名安全检查实验的主意。
代码陆.2 文件名的伊春视察

 

一、用在小程序上的演示Demo:

复制代码 代码如下:

创立正则表明式:

*.wxml文件代码:

<?php
$username = $_SERVER[‘REMOTE_USER’];
$filename = $_GET[‘file’];
//对文本名展开过滤,以保险系统安全
if (!ereg(‘^[^./][^/]*$’, $userfile))
{
die(‘那不是多少个地下的文件名!’);
}
//对用户名进行过滤
if (!ereg(‘^[^./][^/]*$’, $username))
{
die(‘那不是一个无效的用户名’);
}
//通过平安过滤,拼合文件路径
$thefile = “/home/$username/$filename”;
?>

 

4858美高梅 24858美高梅 3

平时情状下,使用与Perl包容的正则表明式匹配函数perg_match(),将比使用ereg()或eregi()的快慢更快。假诺只是摸索一个字符串中是或不是包括某些子字符串,提出选拔strstr()或strpos()函数。
3.preg_grep()
函数原型:array preg_grep (string $pattern, array $input)
preg_grep()函数再次来到贰个数组,个中包罗了$input数组中与给定的$pattern方式相匹配的单元。对于输入数组$input中的每一种元素,preg_grep()也只举办叁回匹配。代码陆.3交到的以身作则不难地印证了preg_grep()函数的运用。
代码陆.三 数组查询匹配

 

<view class='row'>
        <view class="title">文本输入限制输入数字,且最多带2位小数</view>
        <input type='digit' placeholder='请输入有效数字' bindinput='inputNum' class='numInput'/>
    </view>

复制代码 代码如下:

4858美高梅 44858美高梅 5View
Code

View Code

<?php
$subjects = array(
“Mechanical Engineering”, “Medicine”,
“Social Science”, “Agriculture”,
“Commercial Science”, “Politics”
);
//匹配全数仅由有二个单词组成的科目名
$alonewords = preg_grep(“/^[a-z]*$/i”, $subjects);
?>

一 var re = new RegExp();//RegExp是二个目的,和Aarray1样  
贰 //但那样未有其它效用,供给将正则表明式的始末作为字符串传递进入  
3 re =new RegExp(“a”);//最简便易行的正则表明式,将匹配字母a  
四 re=new RegExp(“a”,”i”);//第一个参数,表示11分时不分大小写 

相应*.js文件重大代码:

陆.三.二 举行全局正则表达式匹配
1.preg_match_all()
与preg_match()函数类似。如若选用了第13个参数,将把持有十分的大可能率的合营结果放入。本函数重返整个形式匹配的次数(恐怕为0),借使出错再次回到False。上面是贰个将文件中的U路虎极光L链接地址转换为HTML代码的示范。代码陆.四是
preg_match_all()函数的施用范例。
代码6.4 将文件中的链接地址转成HTML

 

4858美高梅 64858美高梅 7

复制代码 代码如下:

 RegExp构造函数第壹个参数为正则表达式的文本内容,而第三个参数则为可选项标志.标志可以构成使用

//监听文本输入
  inputNum: function (e) {
    return this.checkInputText(e.detail.value);
  },
  //检查输入文本,限制只能为数字并且数字最多带2位小数
  checkInputText: function(text){

    var reg = /^(\.*)(\d+)(\.?)(\d{0,2}).*$/g;

    if (reg.test(text)) { //正则匹配通过,提取有效文本
      text = text.replace(reg, '$2$3$4');
    }
    else { //正则匹配不通过,直接清空
      text = '';
    }

    return text; //返回符合要求的文本(为数字且最多有带2位小数)
  }

<?php
//功用:将文件中的链接地址转成HTML
//输入:字符串
//输出:字符串
function url2html($text)
{
//匹配二个ULacrosseL,直到出现空白停止
preg_match_all(“/http:\/\/?[^\s]+/i”, $text, $links);
//设置页面展现U路虎极光L地址的长短
$max_size = 40;
foreach($links[0] as $link_url)
{
//计算U奥迪Q③L的尺寸。如若跨越$max_size的设置,则缩短。
$len = strlen($link_url);
if($len > $max_size)
{
$link_text = substr($link_url, 0, $max_size).”…”;
} else {
$link_text = $link_url;
}
//生成HTML文字
$text = str_replace($link_url,”<a
href=’$link_url’>$link_text</a>”,$text);
}
return $text;
}
//运转实例
$str =
“那是二个暗含四个UHighlanderL链接地址的多行文字。欢迎访问//www.jb5壹.net”;
print url2html($str);
/*输出结果
那是贰个饱含三个U牧马人L链接地址的多行文字。欢迎访问<a
href=’//www.jb5一.net’>
//www.jb51.net</a>
*/
?>

•g (全文字笔迹检测索)
•i (忽略大小写)
•m (多行查找)

View Code

二.多行匹配
壹味使用POSIX下的正则表式函数,很难展开复杂的合营操作。例如,对全部文件(尤其是多行文本)进行匹配查找。使用ereg()对此展开操作的叁个措施是分行处理。代码陆.五的演示演示了ereg()怎么样将INI文件的参数赋值到数组之中。
代码六.五 文件内容的多行匹配

4858美高梅 84858美高梅 9View
Code

 

复制代码 代码如下:

壹 var re = new RegExp(“a”,”gi”);//匹配全部的a或A

贰、用在web网页上的言传身教师职业道德姆o:

<?php
$rows = file(‘php.ini’); //将php.ini文件读到数组中
//循环遍历
foreach($rows as $line)
{
If(trim($line))
{
//将同盟成功的参数写入数组中
if(eregi(“^([a-z0-9_.]*) *=(.*)”, $line, $matches))
{
$options[$matches[1]] = trim($matches[2]);
}
unset($matches);
}
}
//输出参数结果
print_r($options);
?>

正则表明式还有另一种正则表明式字面量的扬言方式

4858美高梅 104858美高梅 11

提示
那边只是为了有利于表达难点。解析1个*.ini文件,最棒艺术是行使函数parse_ini_file()。该函数间接将*.ini文件分析到3个天机组中。
6.叁.3 正则表明式的交替
1.ereg_replace()和eregi_replace()
函数原型:string ereg_replace (string $pattern, string $replacement,
string $string)
string eregi_replace (string $pattern, string $replacement, string
$string)
ereg_replace()在$string中搜索形式字符串$pattern,并将所匹配结果替换
为$replacement。当$pattern中带有方式单元(或子情势)时,$replacement中形如“\壹”或“$一”的职位将各样被那么些子
形式所匹配的剧情替换。而“\0”或“$0”是指任何的匹配字符串的内容。必要小心的是,在双引号中反斜线作为转义符使用,所以必须使用“\\0”,“
\\1”的形式。
eregi_replace()和ereg_replace()的效益雷同,只是前者忽略大小写。代码陆.陆是本函数的选取实例,那段代码演示了怎么着对程序源代码做简单的清理工科作。
代码陆.6 源代码的清理

4858美高梅 124858美高梅 13View
Code

<div>
            <br/>
            <h3>限制文本框输入为数字,且最多输入2位小数</h3>
            <p><input type="number" oninput="inputText(this);"/></p>
        </div>
        <script type="text/javascript">
            //监听文本框输入,限制其输入为数字,且最多只能输入2位小数
            function inputText(obj){
                obj.value = checkInputText(obj.value);
            }

            //检查输入文本,限制只能为数字并且数字最多带2位小数
            function checkInputText(text){

                var reg = /^(\.*)(\d+)(\.?)(\d{0,2}).*$/g;

                if (reg.test(text)) { //正则匹配通过,提取有效文本
                    text = text.replace(reg, '$2$3$4');
                }
                else { //正则匹配不通过,直接清空
                    text = '';
                }

                return text;
            }
        </script>

复制代码 代码如下:

1 var re = /a/gi;

View Code

<?php
$lines = file(‘source.php’); //将文件读入数组中
for($i=0; $i<count($lines); $i++)
{
//将行末以“\\”或“#”开始的注脚去掉
$lines[$i] = eregi_replace(“(\/\/|#).*$”, “”, $lines[$i]);
//将行末的空白化解
$lines[$i] = eregi_replace(“[ \n\r\t\v\f]*$”, “\r\n”,
$lines[$i]);
}
//整理后输出到页面
echo htmlspecialchars(join(“”,$lines));
?>

 

 

2.preg_replace()
函数原型:mixed preg_replace (mixed $pattern, mixed $replacement, mixed
$subject [, int $limit])
preg_replace较ereg_replace的效劳进一步强劲。其前多个参数均能够利用数组;第七个参数$limit可以设置替换的次数,暗中同意为1体轮换。代码6.7是3个数组替换的运用实例。
代码六.7 数组替换

 正则表明式相关的措施和总体性

3、String.prototype.replace() 使用

复制代码 代码如下:

 

  字符串对象的replace方法能够替换匹配的值。它承受五个参数,

<?php
//字符串
$string = “Name: {Name}<br>\nEmail: {Email}<br>\nAddress:
{Address}<br>\n”;
//模式
$patterns =array(
“/{Address}/”,
“/{Name}/”,
“/{Email}/”
);
//替换字串
$replacements = array (
“No.5, Wilson St., New York, U.S.A”,
“Thomas Ching”,
“tom@emailaddress.com”,
);
//输出方式替换结果
print preg_replace($patterns, $replacements, $string);
?>

正则表明式对象的措施
•test,再次来到二个 Boolean
值,它建议在被搜寻的字符串中是还是不是存在情势。假诺存在则赶回
true,不然就回来 false。
•exec,用正则表明式形式在字符串中运转查找,并回到包<script
type=”text/javascript”
src=”
type=”text/javascript”
src=”
•compile,把正则表明式编写翻译为当中格式,从而执行得更快。

  第二个参数是意味要被调换的始末,能够用字符串表示,也能够用正则表达式,表示搜索方式;

出口结果如下。
Name: Thomas Ching”,
Email: tom@emailaddress.com
Address: No.5, Wilson St., New York, U.S.A
在preg_replace的正则表明式中得以选用方式订正符“e”。其作用是将优异结果作为表达式,并且能够开始展览重复运算。例如:

正则表达式对象的品质
•source,重返正则表明式情势的文件的副本。只读。
•lastIndex,重回字符地方,它是被寻找字符串中下三回成功匹配的启幕地方。
•$一…$9,重返多少个在方式匹配时期找到的、近期保留的壹对。只读。
•input ($_),再次来到执行正式表述查找的字符串。只读。
•lastMatch ($&),再次回到任何正则表明式搜索进度中的最终匹配的字符。只读。
•lastParen
($+),要是有的话,重返任何正则表达式查找进程中最后括的子匹配。只读。
•leftContext
($`),再次来到被寻找的字符串中从字符串发轫地方到最终匹配在此之前的地方之间的字符。只读。
•rightContext
($’),重临被寻找的字符串中从最终2个分外岗位上马到字符串结尾之间的字符。只读。
String对象1些和正则表明式相关的章程

  第3个参数是意味着要替换第贰个参数的始末。

复制代码 代码如下:

•match,找到一个或七个正则表明式的同盟。
•replace,替换与正则表明式匹配的子串。
•search,检索与正则表明式相匹配的值。
•split,把字符串分割为字符串数组。

  使用正则表明式时,replace方法的第二个参数能够采纳日币符号$,
用来替代所替换的剧情:

<?php
$html_body = “<HTML><Body><H1>TEST</H1>My
Picture<Img src=”my.gif”></Body></HTML>”;
//输出结果中HTML标签将全体为小写字母
echo preg_replace (
“/(<\/?)(\w+)([^>]*>)/e”,
“‘\\1’.strtolower(‘\\2’).’\\③'”,
//此处的情势变量\\2将被strtolower转换为小写字符
$html_body);
?>

 

$&: 匹配的子字符串
$·: 匹配结果前面的文本
$': 匹配结果后面的文本
$n: 匹配成功的第n组内容,n是从1开始的自然数
$$: 指代美元符号$

提示
preg_replace函数使用了Perl包容正则表明式语法,日常是比ereg_replace更快的代表方案。假诺仅对字符串做不难的更迭,可以选择str_replace函数。
陆.3.四 正则表明式的拆分
1.split()和spliti()
函数原型:array split (string $pattern, string $string [, int
$limit])
本函数重临一个字符串数组,每一个单元为$string经正则表明式$pattern作为边界划分出的子串。假若设定了$limit,则赶回的数组最多含有$limit个单元。而其间最后3个单元包涵了$string中剩下的装有片段。spliti是split的
忽略大小版本。代码陆.八是二个时不时用到关于日期的示范。
代码陆.八 日期的拆分

测试正则表达式是如何是好事的!

 举例表明其用法:

复制代码 代码如下:

 

4858美高梅 144858美高梅 15

<?php
$date = “08/30/2006”;
//分隔符能够是斜线,点,或横线
list($month, $day, $year) = split (‘[/.-]’, $date);
//输出为另一种时光格式
echo “Month: $month; Day: $day; Year: $year<br />\n”;
?>

4858美高梅 164858美高梅 17View
Code

//1、将匹配的组互换位置
var str1 = 'hello world'.replace(/(\w+)\s(\w+)/, '$2 $1');
console.log('str1 = ' + str1); 
//str1 = world hello


//2、改写匹配的值
var str2 = 'abc'.replace('b', '[$` - $& - $\']');
console.log('str2 = ' + str2); 
//str2 = a[a - b - c]c


//3、replace方法的第二个参数还可以是一个函数,将每一个匹配内容替换为函数返回值
var str3 = '3 and 5'.replace(/[0-9]+/g, function(match){
    return 2 * match;
});
console.log('str3 = ' + str3); 
//str3 = 6 and 10


//4、replace方法第二个参数的替换函数,还可以接受多个参数。
//其中第一个参数是捕捉到的内容,从第二个参数起后面的参数表示是捕捉到的组匹配(有多少个组匹配,就有多少个对应的参数)
//下面写一个网页模板替换的例子
var prices = {
  'p1': '¥1.99',
  'p2': '¥9.99',
  'p3': '¥5.00'
};

var template = ''
  + ''
  + '';

var str4 = template.replace(
  /()(<\/span>)/g,
  function(match, $1, $2, $3, $4){
    return $1 + $2 + $3 + prices[$2] + $4;
  }
);
console.log('str4 = ' + str4);
//str4 = ¥1.99¥9.99¥5.00

2.preg_split()
本函数与split函数功能雷同。代码陆.玖是多少个追寻小说中单词数量的演示。
代码6.玖 查找小说中单词数量

 一     //test方法,测试字符串,符合格局时回来true,不然重临false
 贰     var re = /he/;//最不难易行的正则表明式,将匹配he这么些单词
 3     var str = “he”;
 4     alert(re.test(str));//true
 5     str = “we”;
 6     alert(re.test(str));//false
 7     str = “HE”;
 八     alert(re.test(str));//false,大写,如若要大小写都协作能够内定i标志(i是ignoreCase或case-insensitive的代表)
 9     re = /he/i;
10     alert(re.test(str));//true
11     str = “Certainly!He loves her!”;
12     alert(re.test(str));//true,只要包括he(HE)就符合,借使要只是he或HE,不能够有别的字符,则可使用^和$
一三     re = /^he/i;//脱字符(^)代表字符初始地点
14     alert(re.test(str));//false,因为he不在str最开始
15     str = “He is a good boy!”;
1六     alert(re.test(str));//true,He是字符开始地点,还索要动用$
一七     re = /^he$/i;//$代表字符甘休地点
18     alert(re.test(str));//false
19     str = “He”;
20     alert(re.test(str));//true
21     //当然,这样不可能发现正则表明式有多强大,因为我们1齐能够在地方的事例中利用==或indexOf
22     re = /\s/;// \s匹配任何空白字符,包罗空格、制表符、换页符等等
二三     str= “user Name”;//用户名包括空格
24     alert(re.test(str));//true
25     str = “user        Name”;//用户名包括制表符
26     alert(re.test(str));//true
27     re=/^[a-z]/i;//[]协作钦定范围内的随意字符,那里将匹配英文字母,不区分轻重缓急写
28     str=”variableName”;//变量名必须以字母初阶
29     alert(re.test(str));//true
30     str=”123abc”;
31     alert(re.test(str));//false

View Code

复制代码 代码如下:

 

下一场就应当精通正则/^(\.*)(\d+)(\.?)(\d{0,2}).*$/g的含义了,共有五个匹配组

<?php
$seek = array();
$text = “I have a dream that one day I can make it. So just do it,
nothing is impossible!”;
//将字符串按空白,标点符号拆分(各个标点后也也许跟有空格)
$words = preg_split(“/[.,;!\s’]\s*/”, $text);
foreach($words as $val)
{
$seek[strtolower($val)] ++;
}
echo “共有大致” .count($words). “个单词。”;
echo “在那之中国共产党有” .$seek[‘i’]. “个单词“I”。”;
?>

 当然,仅仅精通了字符串是不是合营方式还不够,大家还供给知道什么字符匹配了情势

var reg = /^(\.*)(\d+)(\.?)(\d{0,2}).*$/g;
/*
正则表达式reg里包含了4个匹配组,分别是:
(\.*) : 匹配输入的第一个字符为小数点. , 对应组匹配符号$1
(\d+) : 匹配输入小数点.之前的数字, 对应组匹配符号$2
(\.?) : 匹配小数点. , 对应组匹配符号$3
(\d{0,2}) : 匹配小数点后面数字,小数点后限制几位小数重复符号{m,n}就可以写到几,对应组匹配符号$4
*/

提示
preg_split()
函数使用了Perl包容正则表明式语法,经常是比split()更快的代表方案。使用正则表明式的形式分割字符串,能够动用更宽泛的相间字符。例如,上面对日期格式和单词处理的辨析。假使仅用有个别特定的字符实行剪切,提议使用explode()函数,它不调用正则表达式引擎,由此进度是最快的。

 

 

您或者感兴趣的稿子:

  • 最常用的PHP正则表达式收集整理
  • PHP匹配延续的数字或字母的正则表明式
  • php中字符串和正则表明式详解
  • php过滤HTML标签、属性等正则表达式汇总
  • php使用正则表明式提取字符串中尖括号、小括号、中括号、大括号中的字符串
  • PHP正则表达式的频率
    回溯与一定分组
  • PHP之正则表明式捕获组与非捕获组(详解)
  • PHP正则表达式之捕获组与非捕获组
  • 浅谈PHP正则中的捕获组与非捕获组
  • PHP达成正则表明式分组捕获操作示例

4858美高梅 184858美高梅 19View
Code

版权证明

 一     var osVersion = “Ubuntu 八”;//个中的八意味着系统主版本号
 2     var re = /^[a-z]+\s+\d+$/i; //+号表示字符至少要出现1回,\s表示空白字符,\d表示一个数字
 三     alert(re.test(osVersion));//true,但我们想明白主版本号
 四     //另3个方法exec,再次来到三个数组,数组的率先个要素为全体的拾一分内容
 5     re=/^[a-z]+\s+\d+$/i;
 6     arr = re.exec(osVersion);
 7     alert(arr[0]);//将osVersion完整输出,因为全体字符串刚好匹配re
 八     //作者只供给取出数字
 9     re=/\d+/;
10     var arr = re.exec(osVersion);
11     alert(arr[0]);//8


 留神,当字符串不匹配re时,exec方法将回来null

作者:TDX

String对象的一些和正则表达式有关的诀要

出处:微博TDX的技巧博客–http://www.cnblogs.com/tandaxia

 

你的支撑是对博主最大的鼓励,感激您的认真阅读。

4858美高梅 204858美高梅 21View
Code

本文版权归笔者和今日头条共有,欢迎转载,但未经我同意必须保留此段证明,且在文章页面鲜明地点给出原来的书文连接,否则保留追究法律义务的权利。

 一     //replace方法,用于替换字符串
 2     var str =”some money”;
 3     alert(str.replace(“some”,”much”));//much money
 4     //replace的首先个参数能够为正则表达式
 5     var re = /\s/;//空白字符
 6     alert(str.replace(re,”%”));//some%money
 7     //在不知晓字符串中有微微空白字符时,正则表明式极为便利
 8     str =”some some             \tsome\t\f”;
 9     re = /\s+/;
10     alert(str.replace(re,”#”));//但这么只会将首先次面世的一批空白字符替换掉
1一     //因为2个正则表明式只好进展2遍匹配,\s+匹配了第二个空格后就淡出了
12     re = /\s+/g;//g,全局标志,将使正则表明式匹配整个字符串
13     alert(str.replace(re,”@”));//some@some@some@
1四     //另一个与之相似的是split
15     var str = “a-bd-c”;
16     var arr = str.split(“-“);//返回[“a”,”bd”,”c”]
一7     //借使str是用户输入的,他大概输入a-bd-c也说不定输入a bd c或a_bd_c,但不会是abdc(那样就说她输错了)
18     str = “a_db-c”;//用户以他喜爱的主意加分隔符s
19     re=/[^a-z]/i;//前边大家说^表示字符开始,但在[]里它表示2个负字符集
20     //匹配任何不在钦点范围内的随意字符,那里将杰出除字母处的有所字符
21     arr = str.split(re);//仍返回[“a”,”bd”,”c”];
2二     //在字符串中搜索时我们常用indexOf,与之对使用赵犇则查找的艺术是search
23     str = “My age is 18.Golden age!”;//年龄不是必定的,大家用indexOf不可能寻找它的职责
24     re = /\d+/;
二伍     alert(str.search(re));//重返查找到的字符串发轫下标10
26     //注意,因为查找本身正是出新第1遍就立马重临,所以不必在search时使用g标志
27     //下边的代码纵然不不可信赖,但g标志是多余的
28     re=/\d+/g;
29     alert(str.search(re));//仍然是10

 

 小心,当search方法未有找到匹配时,将回来-1

好像于exec方法,String对象的match方法也用于将字符串与正则表明式举行匹配并回到结果数组

 

 

4858美高梅 224858美高梅 23View
Code

 1     var str = “My name is CJ.Hello everyone!”;
 2     var re = /[A-Z]/;//匹配全体大写字母
 叁     var arr = str.match(re);//重返数组
 四     alert(arr);//数组中只会含有一个M,因为大家从未利用全局匹配
 5     re = /[A-Z]/g;
 6     arr = str.match(re);
 7     alert(arr);//M,C,J,H
 八     //从字符串中抽取单词
 9     re = /\b[a-z]*\b/gi;//\b表示单词边界
10     str = “one two three four”;
11     alert(str.match(re));//one,two,three,four

 

 

 

 

RegExp对象实例的部分性质

4858美高梅 244858美高梅 25View
Code

1     var re = /[a-z]/i;
2     alert(re.source);//将[a-z]字符串输出
三     //请注意,间接alert(re)会将正则表明式连同前向斜线与标明输出,那是re.toString方法定义的

 每一个RegExp对象的实例具有lastIndex属性,它是被搜寻字符串中下一回中标匹配的开始地点,暗许值是-壹。
lastIndex 属性被 RegExp 对象的 exec 和 test 方法修改.并且它是可写的.

4858美高梅 264858美高梅 27View
Code

 1     var re = /[A-Z]/;
 2     //exec方法执行后,修改了re的lastIndex属性,
 3     var str = “Hello,World!!!”;
 4     var arr = re.exec(str);
 5     alert(re.lastIndex);//0,因为从没安装全局标志
 6     re = /[A-Z]/g;
 7     arr = re.exec(str);
 8     alert(re.lastIndex);//1
 9     arr = re.exec(str);
10     alert(re.lastIndex);//7

 

 

 

 

 转自

 


发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有