javascript的正则匹配方法学习

javascript中正则匹配有3个方法,match,exec,test。这些方法都跟字符串和RegExp对象有关,但使用场景不一样,容易混淆。match是字符串的一个方法,接收一个RegExp对象做为参数,其他的是RegExp对象的方法,接收一个字符串参数。

var str = 'abcdef12ab34cd56ef';
var patt = new RegExp('ab'); //主意是非全局匹配

var ret_test = patt.test(str);
console.log(ret_test);
var ret_match = str.match(patt);
console.log(ret_match);
var ret_exec = patt.exec(str);
console.log(ret_exec);

1. regExp.test(string)

  该方法最简单,在string中找到匹配regExp的字符串则返回true,没找到匹配的字符串则返回false

2. regExp.exec(string)

  该方法稍微复杂些。

  当regExp没有全局标志时,其返回值为字符串数组:数组的第0号元素为刚匹配到的字符串,如果regExp有子表达式,则数组第1号元素为regExp的第一个子表达式,第2号元素为regExp的第二个字表达式...以此类推。在上例中如果 patt = new RegExp('f(\\d)(\\d)','g');则 ret_exec 将为字符串数组:['f12','1','2']。

  当regExp有全局标志(g选项)时,返回值为第一个匹配到的字符串组成的数组,数组的第0号元素为刚匹配到的字符串,如果regExp有子表达式,则数组第1号元素为regExp的第一个子表达式,第2号元素为regExp的第二个字表达式...以此类推。同时主意,regExp对象的一个属性(lastIndex)被改变了,lastIndex被设置为那个字符串最后一个字符所在的位置,其的后面的那个位置(在上例中是lastIndex = 2)。当再次调用 regExp.exec(string)时,搜索范围将从regExp.lastIndex开始搜索。此时返回值仍然是单元素的字符串数组,lastIndex = 10 。我们经常用while循环来遍历字符串中的匹配:

var patt = new RegExp('ab', 'g'),
  str = 'abcdef12ab34cd56ef', ret;
while((ret = patt.exec(str))!=null) {
  console.log(ret);
}
//输出
['ab']
['ab']

  exec方法返回的不是标准的数组,应该算是一个类数组,因为它还有2个属性:input是输入的字符串,index是当前匹配的字符串第一个字符在input中的位置。

3. string.match(regExp)

  该方法比exec简单一些,因为它不用考虑regExp的lastIndex属性。同样,也需要分两种情况(全局匹配与非全局匹配)

  当regExp没有全局标志时,返回值与调用exec一样,返回一个数组,数组的第0号元素为刚匹配到的字符串,如果regExp有子表达式,则数组第1号元素为regExp的第一个子表达式,第2号元素为regExp的第二个字表达式...以此类推。主意该数组同时还有2个属性:input是输入的字符串string,index是当前匹配的字符串第一个字符在input中的位置。

  当regExp有全局标志(g选项)时,很简单,也符合我们的理解:返回所有匹配到的字符串组成的数组。这是标准数组,没有input属性,也没有index属性。返回值数组中除了匹配到的字符串没有任何其他信息。

  从上面的分析看出,如果你只是想判断字符串是否匹配某个正则表达式,就用test方法。如果想一次性取出所有匹配到的字符串,或者只找到第一个匹配的字符串就可以,就用match方法。如果你想多次匹配,而且需要知道每个匹配到的字符串在原始字符串中的位置,或者正则表达式中还有子表达式信息需要关注,就用exec方法。

以上就是javascript正则匹配的多种方法介绍,希望对大家的学习有所帮助。

(0)

相关推荐

  • 解决js正则匹配换行问题实现代码

    复制代码 代码如下: <div id="main"> <div id="left"> </div> <div id="right"> php </div> </div> 如果DIV内没有内容则不换行 把上面的改为: 复制代码 代码如下: <div id="main"> <div id="left"></di

  • JavaScript中使用正则匹配多条,且获取每条中的分组数据

    不过我要面对的是一个很松散的HTML页面,无法XML 因此,本文的重点在于如果要获取的网页中有Table或List段落,需要将这些段落的信息按照列的方式保存到JS的数组中 直接贴代码: 复制代码 代码如下: var str = "字符串字符串<table><tr><th>ID</th><th>姓名</th><th>电话</th></tr><tr><td>01<

  • js实现正则匹配中文标点符号的方法

    本文实例讲述了js正则匹配中文标点符号的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>js正则匹配中文标点符号</title> <head> <body> <input ty

  • js正则匹配出所有图片及图片地址src的方法

    本文实例讲述了js正则匹配出所有图片及图片地址src的方法.分享给大家供大家参考.具体分析如下: 有很多时候我们需要用到文章里面的图片,而且主要是用到它的图片地址,这个时候我们需要通过正则匹配出图片标签,然后做到我们需要的数据 平时也没怎么用正则,一不学就忘,最近项目需要,然后又去goole了,好乱!一搜一大堆,也不是我想要的,最后把自己留一个已被后用: 实现:通过js正则匹配出所有图片及所有图片地址src. 思路:1.匹配出图片img标签(即匹配出所有图片),过滤其他不需要的字符 从匹配出来的

  • javascript下正则匹配百分比的代码

    <script language="javascript">     var re = /^-?\d+%$/;     alert(re.test('50%'));     alert(re.test('-25%'));     alert(re.test('3a5%')); </script>

  • javascript正则匹配汉字、数字、字母、下划线

    javascript正则检测只含有汉字.数字.字母.下划线不能以下划线开头和结尾 遇到一个用户名检测的的问题,查了一下,总结例子如下: 复制代码 代码如下: var reg = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$/;if (!reg.test(实际取值的字符串)) {    alert('请输入5-24位字符:支持中文.英文.数字."_",推荐使用中文');}

  • JavaScript使用RegExp进行正则匹配的方法

    本文实例讲述了JavaScript使用RegExp进行正则匹配的方法.分享给大家供大家参考.具体实现方法如下: <script type="text/javascript"> var matchedTimes = 0; //Match one d followed by one or more b's followed by one d //Remember matched b's and the following d //Ignore case myRe = new R

  • js正则匹配table tr

    我觉得比ijao简单,但是脑子就是转不过弯....请正则高手看看阿. 复制代码 代码如下: <textarea id="txt">  <table border=1 width="20%">                    <tr><th>title</th><th>title2</th></tr>             <tr rs="{id:\

  • javascript的正则匹配方法学习

    javascript中正则匹配有3个方法,match,exec,test.这些方法都跟字符串和RegExp对象有关,但使用场景不一样,容易混淆.match是字符串的一个方法,接收一个RegExp对象做为参数,其他的是RegExp对象的方法,接收一个字符串参数. var str = 'abcdef12ab34cd56ef'; var patt = new RegExp('ab'); //主意是非全局匹配 var ret_test = patt.test(str); console.log(ret_

  • Python时间的精准正则匹配方法分析

    本文实例讲述了Python时间的精准正则匹配方法.分享给大家供大家参考,具体如下: 要用正则表达式精准匹配时间,其实并不容易 方式一: >>> import re >>> t = '19:10:48' >>> m = re.match(r'(.*):(.*):(.*)', t) >>> m.groups() ('19', '10', '48') 方式二: >>> t = '19:10:48' >>>

  • Python3 单行多行万能正则匹配方法

    可匹配单行,也支持换行匹配 [\s\S]*? 加上括号,效果更好 ([\s\S]*?) 以上这篇Python3 单行多行万能正则匹配方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • php与javascript正则匹配中文的方法分析

    本文实例讲述了php与javascript正则匹配中文的方法.分享给大家供大家参考,具体如下: php中正则匹配utf-8中文: (重点是:[\x{4e00}-\x{9fa5}]+) $str = "我们"; if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str,$arr)) { print("该字符串全部是中文"); echo '<pre>'; print_r($arr); } else {

  • JavaScript 替换所有匹配内容及正则替换方法

    由于JavaScript 的 replace 只能替换一次,因此另外编写一个能现替换全部匹配内容方法,代码如下: /* 把 content 中所有的 searchValue 替换为 replaceValue */ function replaceAll(content,searchValue,replaceValue){ while (content.indexOf(searchValue)>-1) { content = content.replace(searchValue,replaceV

  • Javascript里的两种使用正则的方法

    在Javascript里,有两种使用正则的方法,一是创建一个正则表达式的实例,而是使用String对象里的正则表达相关的方法. 正则表达式对象 两种创建方法 var my_regex=/[a-z]+/g;  var my_regex=new ("[a-z]+","g"); 方法 exec(string),对string进行正则处理,并返回匹配结果.  test(string),测试string是否含有匹配结果 字符串对象中的正则 方法 match(pattern) 

  • Java正则匹配中文的方法实例分析

    本文实例讲述了Java正则匹配中文的方法.分享给大家供大家参考,具体如下: 1.匹配双引号间内容: public void test1() { // 匹配双引号间内容 String pstr = "\"([^\"]+)\""; Pattern p = Pattern.compile(pstr); Matcher m = p.matcher("\"goodjob\""); System.out.println(m.fi

  • JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)

    JavaScript replace 方法 replace 方法用于在字符串中用一些字符串替换另一些字符串,或者替换符合正则匹配的字符串,并返回替换后的字符串.其语法如下: 复制代码 代码如下: str_object.replace(reg_exp/str, replacement) 参数说明: 参数 说明 str_object 要操作的字符串(对象) reg_exp/str 必需.要匹配的正则表达式/要替换的字符串 如果 reg_exp 具有全局标志 g,那么 replace() 方法将替换所

随机推荐