正则表达式方法

一、test方法

用于测试字符串参数中是否存在匹配正则表达式模式的字符串

如果存在就返回true,否则返回false

实例:

1、使用test方法不设置g标志时

 2、使用test方法设置g全局

值会变得不稳定,一会是true一会是flase。(实际上是lastIndex的原因,并不是每次匹配都是从头开始的)

第一次lastIndex=0(从第0个之后开始,返回true)查找完后,会把lastIndex的值设置为匹配到的字符串的最后一个字符的索引位置+1,

第二次如果存在就返回true,否则返回false查找时会从lastIndex这个位置开始,lastIndex=0+1(从第1个之后开始,返回true)

第三次查找lastIndex=1+1(从第2后开始,返回false)

所以想用test方法的原意是不用加g标志

二、exec()方法

目的:适应正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反应匹配结果

如果没有匹配的文本则返回null,如果匹配到了就返回一个结果数组;

数组内容:

  • index  声明匹配文本的第一个字符的位置(从第几个字符开始匹配的)
  • input  存放被检索的字符串string

非全局调用

调用非全局的RegExp对象的exec()时,如果匹配到返回数组

第一个元素是与正则表达式相匹配的文本

第二个元素是与RegExpObject的第一个子表达式相匹配的文本(如果有)

第三个元素是与RegExp对象的第二个子表达式相匹配的文本(如果有的话),以此类推

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var reg1=/\d(\w)\d/g;
var reg2=/\d(\w)\d/;
var as="a1b2c3d4e5"; var sd=reg1.exec(as);
document.write(sd.index + sd.toString());
console.log(reg1.lastIndex + '\t' + sd.index + '\t' + sd.toString());
console.log(reg1.lastIndex + '\t' + sd.index + '\t' +sd.toString()); </script>
</body>
</html>

正则表达式对象方法

一、search()方法

目的:用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串

方法返回第一个匹配结果index(匹配的第一个字符出现的位置),查找不到返回 -1

search()方法不执行全局匹配,忽略标志 g,并且总是从字符串的开始进行检索

实例:

直接写数字依然可以

二、match( )方法

目的:match()方法将检索字符串,以找到一个或是多个与regexp匹配的文本

与search()忽略g标志不同的是,match()方法regexp是否有具有g标志对结果影响很大

非全局调用

如果regexp没有标志g,那么match()方法就只能在字符串中执行一次匹配

如果没有找到任何匹配的文本,将返回null

如果找到匹配的文本将返回一个数组,其中存放了与它找到的匹配文本有关的信息。

返回数组的第一个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本

除了常规的数组元素之外,返回的数组还含有2的对象属性

  • index声明匹配文本的起始字符在字符串的位置
  • input声明对stringObject的引用
var reg3=/\d(\w)\d/g;
var ts="a1b2c3d4e5";
var ret=ts.match(reg3);
console.log(ret);
console.log(reg3.lastIndex + '\t' + ret.index + '\t' );

全局调用

如果regexp具有标志g则match()方法将执行全局检索,找到字符串中的所有匹配子字符串

  • 没有找到任何匹配的子串,则返回null
  • 如果找到一个或多个匹配子串,则返回一个数组

数组元素中方存放的是字符串中所有的匹配子串,而且也没有indx属性或input属性(信息量也更少)

var reg4=/\d(\w)\d/;
var ts="a1b2c3d4e5";
var ret=ts.match(reg4);
console.log(ret);
console.log(reg4.lastIndex + '\t' + ret.index + '\t' )

三、split()方法

我们经常使用split 方法把字符串分割为字符数组

在一些复杂的分割情况下可以使用正则表达式解决

用数字作为分隔标志

四、replace()方法

语法结构:

String.prototype.replace(str,replaceStr)

String.prototype.replace(reg,replaceStr)

String.prototype.replace(reg,function)

第一个参数可以是字符串或正则表达式,第二个参数可以是需要替换的字符也可以是函数

例:查找字符串中的数字,并替换成数字或字母

String.prototype.replace(reg,function)

function参数含义

function会在每次匹配替换的时候调用(每次匹配的时候就调用一次),调用的时候会传入四个参数

  • 匹配字符串
  • 正则表达式分组内容,没有分组没有该参数
  • 匹配项在字符串中的index(每个匹配结果的位置)
  • 原字符串

实例:

1、

'a1b2c3d4e5'.replace(/\d/g, function(match,index,origin){
console.log(index);
return parseInt(match) + 1;
});

2、

'a1b2c3d4e5'.replace(/(\d)(\w)(\d)/g, function(match,group1,group2,group3,index,origin) {
console.log(match);
return group1 + group2;
});

JavaScript正则表达式(四)的更多相关文章

  1. 初学JavaScript正则表达式(四)

    字符类 [] 一般情况下正则表达式中一个字符对应字符串一个字符 可以使用元字符 [ ] 来构建一个简单的类        类泛指符合某些特征的对象 例: 'a1b1c1d1'.replace(/[ab ...

  2. web前端学习(四)JavaScript学习笔记部分(10)-- JavaScript正则表达式

    1.JavaScript正则表达式课程概要 方便查找字符串.数字.特殊字串等等 2.正则表达式的介绍 RegExp是正则表达式的缩写 当检索某个文本时,可以使用一种模式来描述要检索的内容.RegExp ...

  3. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  4. 理清JavaScript正则表达式--下篇

    紧接:"理清JavaScript正则表达式--上篇". 正则在String类中的应用 类String支持四种利用正则表达式的方法.分别是search.replace.match和s ...

  5. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  6. JavaScript正则表达式下——相关方法

    上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...

  7. 5分钟教你学会JavaScript正则表达式

    正则表达式在实际开发过程中和技术面试过程中的重要性不言而喻,本文仅仅只是教你如何在几分钟之类学会正则表达式,对于它的原理及运行机制不做介绍. 第一:什么是正则 正则表达式是一种用来描述一定数量文本的模 ...

  8. 理清JavaScript正则表达式

    理清JavaScript正则表达式--下篇 紧接:"理清JavaScript正则表达式--上篇". 正则在String类中的应用 类String支持四种利用正则表达式的方法.分别是 ...

  9. 第一百零五节,JavaScript正则表达式

    JavaScript正则表达式 学习要点: 1.什么是正则表达式 2.创建正则表达式 3.获取控制 4.常用的正则 假设用户需要在HTML表单中填写姓名.地址.出生日期等.那么在将表单提交到服务器进一 ...

  10. 温故知新 javascript 正则表达式

    很长时间没看 正则表达式了,碰巧今天用到,温故知新了一把 看书学习吧 50% 的举一反三练习中的原创.   一 javascript正则表达式的基本知识 1     javascript 正则对象创建 ...

随机推荐

  1. Apache web服务器(LAMP架构)

    1.apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 3).URL 统一资源定位符 http ...

  2. 关于Laravel Gate 和 Policies 的理解

    他们的关系是什么? Gate 派生出 Policies 原因见:Providers/AuthServiceProvider.php 文件 其中有注册policies方法: public functio ...

  3. Matlab——数值计算——单个代数方程 代数方程组

    方程求解 求解单个代数方程 MATLAB具有求解符号表达式的工具,如果表达式不是一个方程式(不含等 号),则在求解之前函数solve将表达式置成等于0. >> syms a syms b ...

  4. 【ABAP系列】SAP Web Dynpro 技术简介

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP Web Dynpro 技 ...

  5. win10家庭版安装Docker (Docker Toolbox)

    开启CPU的虚拟化功能(自行百度)之前安装了VM所以这部跳过.具体查看可以打开任务管理器->性能->cpu 查看是否有 虚拟化:已启用字样 下载Docker Toolbox  下载地址 h ...

  6. ---Mock---基本使用

    一.mock解决的问题 开发时,后端还没完成数据输出,前端只好写静态模拟数据.数据太长了,将数据写在js文件里,完成后挨个改url.某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼.想要尽可能还原真 ...

  7. vue+sentry 前端异常日志监控

    敲代码最糟心不过遇到自己和测试的环境都OK, 客户使用有各种各样还复现不了的问题,被逼无奈只能走到这一步:前端异常日志监控! vue官方文档如下推荐: 就是说, vue有错误机制处理errorHand ...

  8. 红帽学习笔记[RHCSA] 第一周

    目录 红帽学习笔记[RHCSA] 环境 第一课 关于Shell 命令的基础知识 在终端中敲命令的快捷键 本次课程涉及的命令 第二课 常用的目录结构与用途 本次课程涉及到的命令 第三课 关于Linux的 ...

  9. python中session的使用

  10. P4290 [HAOI2008]玩具取名

    传送门 $dp$ 设 $f[i][j][k]$ 表示初始为 $k$ 时,能否得到 $[i,j]$ 这一段子串 设 $pd[i][j][k]$ 表示长度为二的字符串 $ij$ 能否由 $k$ 得到 然后 ...