`
XTU_xiaoxin
  • 浏览: 237792 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【前端学习】javascript正则表达式和字符串RegExp and String(一)

阅读更多

csdn博客地址: http://blog.csdn.net/xtu_xiaoxin/article/details/48810583

 

前言

正则表达式是javascript非常重要和常用的功能,在jquery等大型框架中用的非常频繁,最近抽时间学习了解了相关知识,记录下来与需要的朋友分享。

思维导图

这里写图片描述

RegExp(正则表达式)的创建方式

可以通过两种方式创建一个RegExp,具体如下:

  1. 通过/…./的方式来创建正则表达式(注意: /……/两边是没有单引号或双引号的)
  2. 通过RegExp构造方法来创建一正则表达式

为了更好的描述模式,正则表达式提供了3个标识,分别是: g/i/m

  • g: 全局匹配:在整个字符串中匹配,而不是在第一次匹配后之后停止
  • i: 忽略大小写匹配
  • m: 对多行字符串中的每一行,应用行首和行末的特殊字符(分别是^和$)

具体看参照下面代码加深理解:


var regx = new RegExp('are','g');
var regx1 = /are/g;      //常用的创建方式

RegExp实例的主要属性

根据RegExp的构造函数,我们大概也能猜到RegExp的主要属性,关于实例属性,了解下就可以了。但有一点要注意:这些实例属性是不能通过for in进行遍历获取的。 可参照下面代码加深理解:

var regx1 = /are/g; //常用的创建方式
console.log("source:"+regx.source +" global:"+regx.global+" ignoreCase:"+regx.ignoreCase +" multiline:"+regx.multiline);
// source:are global:true ignoreCase:false multiline:false

for(var p in regx) { //不会进入该for循环
 if(regx.hasOwnProperty(p)) {
  console.log(regx[p]);
 }
}

 

RegExp实例的主要方法 - test

根据该方法非常简单,只有一个参数,常用来验证输入的参数与正则表达式模式是否匹配,如果匹配返回true,否则返回false. 可参照下面代码加深理解:

var regx1 = /are/g;
var res = regx.test('you are a good boy!');
console.log(res) ; //true
var res1 = regx.test('I am a good boy!');
 console.log(res1) ; //false

 

RegExp实例的主要方法 - exec

法该方法是一个非常常用的方法,需要好好理解。它只接收一个参数,即要匹配的字符串,返回值却是一个数组arr,数组里存储的是第一个匹配项的相关信息,包括:

  • input: 要匹配的字符串,exec方法的输入值
  • index:匹配性在字符串中的位置
  • arr[0]: 模式匹配的字符串
  • arr[1]…arr[n]: 第n个捕获组字符串

使用该方法时要注意:如果在正则表达式中未指定全局标志g,则每次执行始终返回的都是第一个匹配项,如果设置了全局标志g,每次调用exec,则会在字符串中继续查找新匹配项
可参照下面代码加深理解:

var regx = /fn:(\w+)\s+ln:(\w+)\s/g;
 var s ="your fn:xiaoxin ln:tang right?";
 var result = regx.exec(s);
 console.log(result.input); //your fn:xiaoxin ln:tang right?
 console.log(result.index); //5
 console.log(result[0]); //fn:xiaoxin ln:tang
 console.log(result[1]); //xiaoxin
 console.log(result[2]); //tang
  console.log(result[3]); //undefined  因为只有2个捕获组,所以打印undefined

 

RegExp构造函数属性

关于函数属性,可以参照其它编程语言(如java)中类的静态属性来理解,这些属性被所有的RegExp实例共享,也就是所有的RegExp都可以访问和修改这些属性,当某个实例执行test或exec方法时,这些属性的值也将跟着发生变化
关于这些属性,我们可以按照自己的理解记忆:

  • input : 需要进行模式匹配的字符串,test或exec方法的输入参数。 参数别名: $-
  • lastMatch : 最近一次匹配项 。 参数别名:$&
  • leftContext : 匹配项左边的字符串。参数别名:$`
  • rightContext : 匹配项右边的字符串 。 参数别名:$’

当然这些值,完全可以通过RegExp实例执行exec返回的结果计算得到,那为什么要在构造函数RegExp中设置这些属性呢?*
可参照下面代码加深理解:

var regx = /fn:(\w+)\s+ln:(\w+)\s/g;
var s ="your fn:xiaoxin ln:tang right?";
var result = regx.exec(s);
console.log(RegExp.input); //your fn:xiaoxin ln:tang right?
console.log(RegExp.lastMatch); //fn:xiaoxin ln:tang
console.log(RegExp.leftContext); //your
console.log(RegExp.rightContext); //right?
console.log(RegExp.$1); //xiaoxin
console.log(RegExp.$2); //tang

 

RegExp - 元字符

与其它语言中的正则表达式类似, js正则表达式中也存在一些元字符,这些字符有特殊的用途和含义,所以在使用的过程中,需要对这些字符进行转义,通过在这些字符前加上’\’ 进行转义处理. JS正则表达是的元字符有:

( [ { \ ^ $ | ) ? * + . ] }

RegExp - 贪婪匹配和懒惰匹配

贪婪匹配就是在正则表达式的匹配过程中,默认会使得匹配长度越大越好。在JS正则表达式中,懒惰限定符是 ‘?’ ,在模式中添加 ‘?’ 则要求是懒惰匹配。具体参照下面代码来理解:

var s = 'I am a good boy,you are also a good boy !';
var regx = /good.*boy/g; //贪婪匹配
console.log(regx.exec(s)[0]); //good boy,you are also a good boy

var regx1 = /good.*?boy/g; //懒惰匹配
console.log(regx1.exec(s)[0]); //good boy

 

参照文章

http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    javascript正则表达式和字符串RegExp and String(一).docx

    javascript正则表达式和字符串RegExp and String(一).docx

    javascript正则表达式和字符串RegExp and String(二).docx

    javascript正则表达式和字符串RegExp and String(二).docx

    javascript正则表达式和字符串RegExp and String(二)

    在上篇文章给大家介绍了javascript正则表达式和字符串RegExp and String(一),本文给大家继续分享相关内容。 前言 我认为,在学习一门编程语言的过程中,字符串、数组、容器是非常重要的部分,为了提高编程效率,...

    javascript正则表达式和字符串RegExp and String(一)

    主要介绍了javascript正则表达式和字符串RegExp and String(一)的相关资料,需要的朋友可以参考下

    JavaScript正则表达式

    JavaScript正则表达式 一、认识正则表达式 1、正则表达式是描述字符模式的对象,正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。 2、String和RegExp都定义了使用正则表达式进行强大...

    正则表达式

    JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...

    String字符串匹配javascript 正则表达式

    在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace、match、search等方法,下面所述是对相关方法使用的总结,需要的朋友参考下。 String对象中支持正则表达式...

    Javascript正则表达式验证账号、手机号、电话和邮箱的合法性

    本章介绍 JavaScript正则表达式。 1、验证帐号是否合法 验证规则:字母、数字、下划线组成,字母开头,4-16位。 function checkUser(str){ var re = /^[a-zA-z]\w{3,15}$/; if(re.test(str)){ alert(正确&#...

    js中string之正则表达式replace方法详解

    replace方法是javascript涉及到正则表达式中较为复杂的一个方法,严格上说应该是string对象的方法。只不过牵扯到正则的时候比较多一些。需要我们灵活的使用。 语法: stringObj.replace(regexp/substr,replacement)...

    javascript类型系统_正则表达式RegExp类型详解

    javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,使用正则表达式可以进行强大的模式匹配和文本检索与替换。本文将介绍正则表达式的RegExp对象,以及正则表达式涉及 到的属性和方法 对象 ...

    java 正则表达式

    JAVA正则表达式语法(转)正则表达式语法正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式 ...

    JavaScript 正则表达式解析

    JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...

    正则表达式30分钟入门教程

    • Javascript正则表达式在线测试工具 如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此。由于难于读写,容易出错,...

    javascript正则表达式中的replace方法详解

    replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。

    JavaScript 正则表达式(笔记)

    // String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数; 二 创建正则表达式 1.创建正则表达式 // JS提供了两种方法创建正则;一种是采用new运算符,另一种是采用字面量方式;  (1).var ...

    正则表达式模式匹配的String方法

    在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace、match、search等方法,以下是对一些方法使用的总结。 String对象中支持正则表达式有4种方法,分别是:...

    JavaScript正则表达式小结

    正则表达式是一个模式,可以用来校验、提取、替换数据(主要处理字符串)。 正则表达式的创建 1.字面量方式创建(常用): var reg = / 规则 /; 2.构造函数方式创建 var reg = new RegExp(); //注意:new可以省略 ...

Global site tag (gtag.js) - Google Analytics