2019独角兽企业重金招聘Python工程师标准>>>

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

String对象中支持正则表达式有4种方法,分别是:search、replace、match、split

str.search(regexp)

定义:search()方法将在字符串str中检索与表达式regexp相匹配的字串,并且返回第一个匹配字串的第一个字符的位置。如果没有找到任何匹配的字串,则返回-1。

例如:

var str = "Javascript";    str.search(/script/); // 返回 script 中s的位置为 4    str.search(/j/i); // 设置正则表达是标识i:忽略大小写,则匹配到J,返回位置0

1

2

3

var str = "Javascript";

str.search(/script/); // 返回 script 中s的位置为 4

str.search(/j/i); // 设置正则表达是标识i:忽略大小写,则匹配到J,返回位置0

但是,search()方法不支持全局搜索,因为会忽略正则表达式参数的标识g,并且也忽略了regexp的lastIndex属性,总是从字符串的开始位置进行检索,所以它会总是返回str的第一个匹配的位置。
例如:

var str = "javascript is cool";    str.search(/s/g); // 返回 javascript 中的s位置4,不会继续检索s

1

2

var str = "javascript is cool";

str.search(/s/g); // 返回 javascript 中的s位置4,不会继续检索s

str.replace(regexp, replacement)

定义:replace()方法是执行查找并替换的操作。它将正则表达式regexp匹配到的字串,然后用replacement的字符串替换掉字串,如果有全局标识g,则替换全部匹配的字串,否则只替换第一个匹配字串。

replace方法应该是比较常用的一个方法,在字符串替换操作中非常有用的。例如:

1、简单替换

var str = "javascript";   str.replace(/javascript/,'JavaScript'); // 将字符串javascript替换为JavaScript

1

2

var str = "javascript";

str.replace(/javascript/,'JavaScript'); // 将字符串javascript替换为JavaScript

2、全局替换

// 使用全局表示g进行全局替换    var str = "javascript";    str.replace(/a/g, 'b'); // 将所有的字母a替换为字母b,返回 jbvbscript

1

2

3

// 使用全局表示g进行全局替换

var str = "javascript";

str.replace(/a/g, 'b'); // 将所有的字母a替换为字母b,返回 jbvbscript

3、使用replacement中的特殊字符替换,在replacement中$字符有特殊的意义,具体说明如下表格:

字符 替换文本
$1、$2、…、$99 与regexp中的第1个到99 个子表达式相匹配的文本
$& 与regexp相匹配的字串
$` 位于匹配子串左侧的文本
$’ 位于匹配子串右侧的文本
$$ 直接量符号

来看下例子:

//1、用子表达式替换:$1、$2等    var str = "javascript";    str.replace(/(java)(script)/,'$2$1');   // 表达式中()就是一个子表达式,$1对应是第一个表达式的内容,即java,$2为script,所以替换结果为:scriptjava    //2、$& 为正值表达式匹配的字串    var str = "javascript";    str.replace(/java/,'$&-');    // 正则表达式通过直接量java来匹配,匹配结果为java,则 $&的值为java,然后用字符串$&-来替换匹配的字串,结果为java-script    // 3、 $`  $'  $$    var str = "javascript";    str.replace(/ava/,"$`"); // $`为匹配子串ava的左侧文本,则为j,则替换后ava的结果为:jjscript    str.replace(/ava/,"$'"); // $'为匹配子串ava的右侧文本,则为script,则替换ava的结果为:jscriptscript    str.replace(/ava/,"$$"); // $$为直接量符号,即插入一个$符号,替换结果为:j$script

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//1、用子表达式替换:$1、$2等

var str = "javascript";

str.replace(/(java)(script)/,'$2$1');

// 表达式中()就是一个子表达式,$1对应是第一个表达式的内容,即java,$2为script,所以替换结果为:scriptjava

//2、$& 为正值表达式匹配的字串

var str = "javascript";

str.replace(/java/,'$&-');

// 正则表达式通过直接量java来匹配,匹配结果为java,则 $&的值为java,然后用字符串$&-来替换匹配的字串,结果为java-script

// 3、 $`  $'  $$

var str = "javascript";

str.replace(/ava/,"$`"); // $`为匹配子串ava的左侧文本,则为j,则替换后ava的结果为:jjscript

str.replace(/ava/,"$'"); // $'为匹配子串ava的右侧文本,则为script,则替换ava的结果为:jscriptscript

str.replace(/ava/,"$$"); // $$为直接量符号,即插入一个$符号,替换结果为:j$script

4、使用replacement作为函数替换

replace的参数replacement可以是函数而不是字符串,每个匹配都会调用该函数,它返回的字符串将作为替换的文本使用。该函数的第一 个参数是整个匹配模式的字符串,接下来的参数是与模式中的子表达式匹配的字符串,可以有0个或多个参数。接下来的参数是一个整数,声明了匹配在str中出 现的位置。最后的参数是str自身。
来看个例子:

// match 为匹配整个字符串,即:'abc12345#$*%' // p1 为第一个子表达式,([^d]*),匹配0个或多个非数字的字符,即:abc // p2 为第二个子表达式,(d*),匹配0个或多个的数字,即:12345 // p3 为第三个子表达式,([^w]*),匹配0个或匹配任何非单词字符。等价于 '[^A-Za-z0-9_]',即 #$*% // offset 为模式匹配出现的位置,从第一个字符已经匹配成功,则位置为0 // string为字符串本身,即 abc12345#$*% function replacer(match, p1, p2, p3, offset, string) {  return [p1, p2, p3].join(' - '); } var newString = 'abc12345#$*%'.replace(/([^d]*)(d*)([^w]*)/, replacer); // 替换结果为:abc - 12345 - #$*%

1

2

3

4

5

6

7

8

9

10

11

12

13

// match 为匹配整个字符串,即:'abc12345#$*%'

// p1 为第一个子表达式,([^d]*),匹配0个或多个非数字的字符,即:abc

// p2 为第二个子表达式,(d*),匹配0个或多个的数字,即:12345

// p3 为第三个子表达式,([^w]*),匹配0个或匹配任何非单词字符。等价于 '[^A-Za-z0-9_]',即 #$*%

// offset 为模式匹配出现的位置,从第一个字符已经匹配成功,则位置为0

// string为字符串本身,即 abc12345#$*%

function replacer(match, p1, p2, p3, offset, string) {

return [p1, p2, p3].join(' - ');

}

var newString = 'abc12345#$*%'.replace(/([^d]*)(d*)([^w]*)/, replacer);

// 替换结果为:abc - 12345 - #$*%

str.match(regexp)

定义:match()方法是最常用的String正则表达式方法。它唯一的参数就是一个正则表达式或者通过RegExp()构造函数来创建正则表达式,返回值是包含了匹配结果的数组。

match()方法中的regexp正则表达式一般又分为两种情况:有设置全局标志g和没有设置全局标志g

1、有设置全局标志

如果设置了全局标志g,则返回的数组包含的就是出现在字符串的所有匹配结果,例如:

// 全局匹配    var str = "1 plus 2 equals 3";    str.match(/d/g);  // 匹配字符串中出现的所有数字,并返回一个数组: [1,2,3]

1

2

3

// 全局匹配

var str = "1 plus 2 equals 3";

str.match(/d/g);  // 匹配字符串中出现的所有数字,并返回一个数组: [1,2,3]

2、没有设置全局标志

如果没有设置全局标志,则就不是全局性的检索,只是检索第一个匹配。这种情况下,match()方法匹配的结果也是返回一个数组,数组的第一个元素就是匹配的字符串,而余下的元素则是正则表达式中用括号括起来的子表达式。来看个例子:

// 非全局匹配     var str = "visit my blog at http://www.example.com";     str.match(/(w+)://([w.]+)/); // 返回结果:["http://www.example.com", "http", "www.example.com"]     // 正则表达式匹配的结果为:http://www.example.com     // 第一个子表达式 (w+)匹配结果:http     // 第二个子表达式 ([w.])匹配结果: www.example.com

1

2

3

4

5

6

// 非全局匹配

var str = "visit my blog at http://www.example.com";

str.match(/(w+)://([w.]+)/); // 返回结果:["http://www.example.com", "http", "www.example.com"]

// 正则表达式匹配的结果为:http://www.example.com

// 第一个子表达式 (w+)匹配结果:http

// 第二个子表达式 ([w.])匹配结果: www.example.com

str.split(delimiter, limit)

定义:split()方法可以把调用它的字符串分解为一个字串数组,使用的分隔符是它的参数。
参数:
delimiter:字符串或者正则表达式,从该参数指定的地方分割字符串。
limit:指定返回数组的最大长度,如果没有设置该参数,则整个字符串都会被分割。
例如:

//1、 只传一个参数,默认分割整个字符串 var str ="a,b,c,d,e"; str.split(','); // 返回分割的字符串数组:["a", "b", "c", "d", "e"] //2、传入两个参数 var str ="a,b,c,d,e"; str.split(',',3); //指定限定长度,则返回对应的数组:["a", "b", "c"] //3、使用正则表达式匹配,不包含分割字符串 var str = "aa44bb55cc66dd"; str.split(/d+/); //通过匹配数字进行分割字符串,但不包含分割的字符串,则返回的结果为:["aa","bb","cc","dd"]; //4、使用正则表达式匹配,包含分割字符串 var str = "aa44bb55cc66dd"; str.split(/(d+)/); //通过匹配数字进行分割字符串,且分割的字符串是包含在子表达式中,则返回的结果为:["aa", "44", "bb", "55", "cc", "66", "dd"]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//1、 只传一个参数,默认分割整个字符串

var str ="a,b,c,d,e";

str.split(','); // 返回分割的字符串数组:["a", "b", "c", "d", "e"]

//2、传入两个参数

var str ="a,b,c,d,e";

str.split(',',3); //指定限定长度,则返回对应的数组:["a", "b", "c"]

//3、使用正则表达式匹配,不包含分割字符串

var str = "aa44bb55cc66dd";

str.split(/d+/); //通过匹配数字进行分割字符串,但不包含分割的字符串,则返回的结果为:["aa","bb","cc","dd"];

//4、使用正则表达式匹配,包含分割字符串

var str = "aa44bb55cc66dd";

str.split(/(d+)/); //通过匹配数字进行分割字符串,且分割的字符串是包含在子表达式中,则返回的结果为:["aa", "44", "bb", "55", "cc", "66", "dd"]

以上。

转载于:https://my.oschina.net/snowing1990/blog/649867

浅析正则表达式模式匹配的 String 方法相关推荐

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

    2019独角兽企业重金招聘Python工程师标准>>> String对象的一些用以执行正则表达式模式匹配和检索替换操作的方法 1.search() 参数:正则表达式 返回:第一个与之 ...

  2. php正则匹配js中变量_Postgresql 中的 正则表达式 模式匹配

    参考链接: PostgreSQL 模式匹配​www.yiibai.com 1. like string LIKE pattern [ESCAPE escape-character] string NO ...

  3. C++正则表达式regex库使用方法总结

    目录 一.regex库中常用组件介绍 二.regex库中常用组件使用 1.regex库组件使用准备 2.regex_match使用 3.regex_search使用 4.regex_replace使用 ...

  4. python 判断字符串是否包含另一个字符串_强烈推荐:Python字符串(string)方法整理(一)...

    作者:骏马金龙 原文地址: https://www.cnblogs.com/f-ck-need-u/p/9127699.html python中字符串对象提供了很多方法来操作字符串,功能相当丰富. p ...

  5. java判断手机号_java使用正则表达式判断手机号的方法示例

    本文实例讲述了java使用正则表达式判断手机号的方法.分享给大家供大家参考,具体如下: 要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段, 故先要整清楚现在已经开放了 ...

  6. java字符串string_Java字符串String方法总结

    Java字符串创建与初始化实例.Java字符串String方法总结,包括字符串的大小写替转换,获取字符串长度的方法.截取字符串,去除字符串中的空格.StringBuffer类转换成String类等: ...

  7. c++ 模糊搜索 正则表达式_c++使用正则表达式提取关键字的方法

    下面看下c++通过正则表达式提取关键字,代码如下所示: string text = "岳云鹏的对象叫铁锤"; regex pattern("(.*)的对象叫(.*)&qu ...

  8. JavaScript 常用Array、String方法

    1.常用Array方法 concat()连接两个数组 [1, 3, 5, 7, 9].concat([2, 4, 6, 8, 10]) forEach()遍历数组 [1, 2, 3, 4, 5, 6, ...

  9. [转载] python 判断字符串是否包含另一个字符串_强烈推荐:Python字符串(string)方法整理(一)...

    参考链接: python中的字符串string center 作者:骏马金龙 原文地址: https://www.cnblogs.com/f-ck-need-u/p/9127699.html pyth ...

最新文章

  1. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】
  2. paip.语义分析--单字词名词表
  3. 说说Thread.Sleep(0)的那些奇怪的事
  4. Spring MVC 下设置默认访问页面的3种方式
  5. 什么是MIME?什么是MIME邮件?
  6. boost::hana::at_c用法的测试程序
  7. C语言实现heap sort堆排序的算法(附完整源码)
  8. myeclipse中自带的tomcat在安装文件中的具体位置
  9. koa --- nunjucks
  10. 智能云改-docker云迁移实战
  11. 自定义报错返回_MybatisPlus基础篇学习笔记(五)------自定义sql及分页查询
  12. php 输出 继续执行,使用PHP中的实时输出运行进程
  13. python中factor函数_Python入门-函数
  14. 分享一个IIS日志分析工具-LogParse
  15. 微信H5支付浏览器支付
  16. 富军:史玉柱鲜为人知的网络营销震撼策略!
  17. Re:从零开始的DS学习 十大排序算法我都整理好了
  18. attr 与prop 的区别
  19. 关于更改了配置文件my.ini导致mysql无法启动的问题
  20. Tomcat的安装与启动

热门文章

  1. 坚果 android 系统升级,坚果手机的系统是什么?坚果手机能升级安卓5.0吗?
  2. python array 语法_Python基本语法
  3. serch安装2012 windows_随身携带电脑系统 U盘系统工具WinToGo系统安装到U盘
  4. Java项目:个人博客系统(java+SSM+Mysql+Servlet+JavaWeb)
  5. Java项目:嘟嘟网上商城系统(java+jdbc+jsp+mysql+ajax)
  6. 《深入理解计算机系统》学习心得二:关于show-bytes的 学习
  7. 用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?
  8. iOS 标签自动布局
  9. Sap Byd Soap使用 SSL 客户端证书
  10. kail安装和vmtools安装