资讯专栏INFORMATION COLUMN

——————【 正则表达式 】——————

fuchenxuan / 1676人阅读

摘要:正则表达式边界及前瞻边界整个字符串开头结尾单词的边界前瞻正向前瞻反向前瞻正则的对象属性属性描述对象是否具有标志。正则表达式的源文本。支持正则表达式的对象的方法方法描述检索与正则表达式相匹配的值。替换与正则表达式匹配的子串。

——————【 正则表达式 】——————

复习字符串操作

indexOf 查找字符 返回位置
charAt  查找位置 返回字符
substring 获取字符窜
split     分割字符串

正则表达式的概念和写法

正则 :也叫做规则,让计算机能够读懂人类的规则
正则都是操作字符串的。
正则的写法:
var re = /a/; //和数组字符串区分开来
var re = newRegExp("a");
【正则默认】 :
1.正则中是区分大小写的
不区分大小写在正则后加 表示i (ignore)
如var re = newRegExp("a","i");
2.正则匹配成功就会结束,不会继续匹配,
如果想全部查找就要加 标识g (global)

量词:代表出现的次数

量词        描述
n+            匹配任何包含至少一个 n 的字符串。
n*            匹配任何包含零个或多个 n 的字符串。
n?            匹配任何包含零个或一个 n 的字符串。
n{X}        匹配包含 X 个 n 的序列的字符串。
n{X,Y}          匹配包含 X 至 Y 个 n 的序列的字符串。
n{X,}            匹配包含至少 X 个 n 的序列的字符串。
n$            匹配任何结尾为 n 的字符串。
^n            匹配任何开头为 n 的字符串。
?=n            匹配任何其后紧接指定字符串 n 的字符串。
?!n            匹配任何其后没有紧接指定字符串 n 的字符串。
>{n,m}:至少出现n次,最多m次
>{n,} :至少n次
>* :任意次 相当于{0,}
? :零次或一次 相当于{0,1}
+ :一次或任意次相当于 {1,}
{n}: 正好n次
例子:判断是不是QQ号
//^ : 放在正则的最开始位置,就代表起始的意思,注意 /[^a] / 和

/^[a]/是不一样的,前者是排除的意思,后者是代表首位。

//$ : 正则的最后位置 , 就代表结束的意思

//首先想QQ号的规则 
1 首位不能是0
2 必须是 5-12位的数字
var aInput = document.getElementsByTagName("input");

var re = /^[1-9]d{4,11}$/;

//123456abc为了防止出现这样的情况,所以必须限制最后

//首位是0-9,接着是4-11位的数字类型。

aInput[1].onclick = function(){

    if( re.test(aInput[0].value) ){

        alert("是QQ号");
    
    }else{
    
        alert("不是QQ号");

    }
};

例子:去掉前后空格(面试题经常出现)

var str = " hello ";

    alert( "("+trim(str)+")" );//为了看出区别所以加的括号。 (hello)
    
function trim(str){

var re = /^s+|s+$/g; // |代表或者 s代表空格 +至少一个 前面有至少一个空格 或者后面有至少一个空格 且全局匹配

return str.replace(re,""); //把空格替换成空

}

贪婪模式与反贪婪模式

*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可>以实现非贪婪或最小匹配。
var c="qqq icbkb coiwcnk tyu kjanc alnc"

var reg =/w{4,7}/g

    console.log(c.match(reg))// ["icbkb", "coiwcnk", "kjanc", "alnc"]

var reg =/w{4,7}?/g

    console.log(c.match(reg)) ["icbk", "coiw", "kjan", "alnc"]
    

正则表达式边界及前瞻

边界

整个字符串开头( ^ ) 结尾( $ )

单词的边界 (b), (B)

前瞻

正向前瞻 reg (? = assert)

反向前瞻 reg (?! = assert)

正则的对象属性

属性 描述

global RegExp 对象是否具有标志 g。 ignoreCase RegExp 对象是否具有标志 i。 lastIndex 一个整数,标示开始下一次匹配的字符位置。 multiline RegExp 对象是否具有标志 m。 source 正则表达式的源文本。

正则表达式的使用

RegExp 对象方法

方法 描述
compile    编译正则表达式。
exec        检索字符串中指定的值。返回找到的值,并确定其位置。
test        检索字符串中指定的值。返回 true 或 false。

支持正则表达式的 String 对象的方法

方法 描述
search        检索与正则表达式相匹配的值。
match        找到一个或多个正则表达式的匹配。
replace        替换与正则表达式匹配的子串。
split        把字符串分割为字符串数组。

test() :在字符串中查找符合正则的内容,若查找到返回true,反之返回false.

用法正则.test(字符串)
例子:判断是否是数字
var str = "374829348791";
    
var re = /D/; // D代表非数字
    
    if( re.test(str) ){ // 返回true,代表在字符串中找到了非数字。

        alert("不全是数字");
    
        }else{
    
        alert("全是数字");
    }

search() :在字符串搜索符合正则的内容,搜索到就返回出现的位置(从0开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置), 如果搜索失败就返回 -1

用法:字符串.search(正则)
在字符串中查找复合正则的内容。忽略大小写:i——ignore(正则中默认是区分大小写的 如果不区分大小写的话,在正则的最后加标识 i )

例子:在字符串中找字母b,且不区分大小写

var str = "abcdef";
var re = /B/i;
//var re = new RegExp("B","i"); 也可以这样写
alert( str.search(re) ); // 1

match() 在字符串中搜索复合规则的内容,搜索成功就返回内容,格式为数组,失败就返回null。

用法: 字符串.match(正则)
量词:+ 至少出现一次 匹配不确定的次数(匹配就是搜索查找的意思)
全局匹配:g——global(正则中默认,只要搜索到复合规则的内容就会结束搜索 )

例子:找出指定格式的所有数字,如下找到 123,54,33,879

var str = "haj123sdk54hask33dkhalsd879";

var re = /d+/g; // 每次匹配至少一个数字 且全局匹配

如果不是全局匹配,当找到数字123,它就会停止了。

就只会弹出123.加上全局匹配,就会从开始到结束一直去搜索符合规则的。

如果没有加号,匹配的结果就是1,2,3,5,4,3,3,879并不是我们想要的,有了加号,每次匹配的数字就是至少一个了。

alert( str.match(re) ); // [123,54,33,879]

replace() :查找符合正则的字符串,就替换成对应的字符串。返回替换后的内容。

用法: 字符串.replace(正则,新的字符串/回调函数)(在回调函数中,第一个参数指的是每次匹配成功的字符) | : 或的意思 。

例子:敏感词过滤,比如 >我爱北京天安门,天安门上太阳升。------我爱*,上太阳升。即北京和天安门变成*号,
一开始我们可能会想到这样的方法:

var str = "我爱北京天安门,天安门上太阳升。";

var re = /北京|天安门/g;     // 找到北京 或者天安门 全局匹配

var str2 = str.replace(re,"*"); 

alert(str2)                 //我爱**,*上太阳升 

//这种只是把找到的变成了一个*,并不能几个字就对应几个*。

要想实现几个字对应几个*,我们可以用回调函数实现:

var str = "我爱北京天安门,天安门上太阳升。";

var re = /北京|天安门/g;        // 找到北京 或者天安门 全局匹配

var str2 = str.replace(re,function(str){

alert(str);         //用来测试:函数的第一个参数代表每次搜索到的符合正则的字符,所以第一次str指的是北京 第二次str是天安门 第三次str是天安门

var result = "";

for(var i=0;i

():,小括号,叫做分组符。就相当于数学里面的括号。如下:

var str = "2013-6-7";

var re1 = /d-+/g;           // 全局匹配数字,横杠,横杠数量至少为1,匹配结果为: 3- 6-

var re1 = /(d-)+/g;        // 全局匹配数字,横杠,数字和横杠整体数量至少为1 3-6-

var re2 = /(d+)(-)/g;      // 全局匹配至少一个数字,匹配一个横杠 匹配结果:2013- 6-

[] : 表示某个集合中的任意一个,比如 [abc] 整体代表一个字符 匹配 a b c 中的任意一个,也可以是范围,[0-9] 范围必须从小到大 。

1 整体代表一个字符 :^写在[]里面的话,就代表排除的意思

例子:匹配HTML标签 比如

hahahah
找出标签

var re = /<2+>/g; //匹配左括号

中间至少一个非右括号的内容(因为标签里面还有属性等一些东西),然后匹配右括号

var re = /<[wW]+>/g; //匹配左括号 中间至少一个字符或者非字符的内容,然后匹配右括号//

其实就是找到左括号,然后中间可以有至少一个内容,一直到找到右括号就代表是一个标签。

概念理解

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这>>些特定字符>的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一>>种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);

可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式的特点是:

灵活性、逻辑性和功能性非常强;

可以迅速地用极简单的方式达到字符串的复杂控制。

a ↩

> ↩

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84927.html

相关文章

  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • JS中的正则达式

    摘要:构造函数可以有两个字符串参数,第一个参数包含正则表达式的主体部分。只读的布尔值,说明这个正则表达式是否带有修饰符。中正则的扩展构造函数在中,只能接受字符串作为参数,允许其直接接受正则表达式作为参数。 上文传送门:初探正则表达式 正则表达式是一个描述字符模式的对象,JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进...

    Soarkey 评论0 收藏0
  • JavaScript正则达式总结

    摘要:正则表达式一直是里比较难以掌握的点。在中创建正则的两种方式使用字面量这就是正则表达式的字面量语法,表示正则表达式的模式,为正则表达式的标志。字面量形式的正则表达式一般使用较多,也推荐大家尽可能使用这种形式,简洁易读,符合正常的使用习惯。 正则表达式一直是js里比较难以掌握的点。 看不懂,学不会,记不住。 每次需要用到正则的时候,都需要再去查找资料。 今天花时间把正则的知识点总结下,希望...

    big_cat 评论0 收藏0
  • 正则与JS中的正则

    摘要:注意本文将正则与中的正则分开讨论。正则零宽断言更多参考各种语言对于正则不同支持参考单行模式与多行模式通过设置正则表达式后的修饰符可开启对应的匹配模式单行模式和多行模式。 最近这段时间帮同学处理一些文档, 涉及到一些结构化文档的工作大部分都得使用正则表达式, 之前对于正则的认识大多来源于语言书上那几页的介绍, 自己也没有用过几次。这里将我之前感到模糊的概念作个整理。因为对JS了解多点,所...

    firim 评论0 收藏0
  • JavaScript正则达式的匹配模式

    摘要:选择分组和引用正则表达式的语法还包括指定选择项子表达式分组和引用前一子表达式的特殊字符。带圆括号的表达式的另一个用途是允许在同一正则表达式的后部引用前面的子表达式。 正则表达式(regular expression)是一个描述字符模式的对象。JavaScript的 RegExp类 表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进 行强大的模式匹配和文本检索与...

    wqj97 评论0 收藏0
  • 正则达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0

发表评论

0条评论

fuchenxuan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<