快速掌握JavaScript正则表达式(2)
作者:dh20156 来源:w3cgroup 发布时间:2010-01-23 11:39:00
貪婪與非貪婪的匹配過程
考慮以下代碼:
<script type="text/javascript">
var s = 'http://www/hello/world.php';
var r1 = /.*\//g;
var r2 = /.*?\//g;
alert(s.match(r1));
alert(s.match(r2));
</script>
//貪婪匹配
匹配整個字符串
從后逐一舍去最后一個字符繼續
http://www/hello/
//非貪婪匹配
從第一個字符開始匹配
如果失敗,讀入下一個字符繼續
http:/, /, www/, hello/
分組、反向引用與非捕獲性分組
用來匹配以一系列字符為一個單位的模式
(一系列的字符作為一個整體哦)
每創建一個分組,在執行test()、match()、search()、replace()后,可以通過全局$1...$9屬性來獲取匹配到的每一個分組。
分組匹配將帶來一定的效率損耗,如果有時候不需要獲取分組的結果,可以使用非捕獲性分組:(?:一系列的字符)
候選
用來匹配a or b or n...模式。比如,匹配文件類型:
<script type="text/javascript">
var s = 'http://www/hello/world.png.php';
var r = /(?:jpg|gif|png)$/i;
alert(r.test(s));
</script>
前瞻
正向前瞻
var r = /(aaa(?=bbb))/;
用于匹配后面緊挨著的是bbb的串aaa
負向前瞻
var r = /(aaa(?!bbb))/;
用于匹配后面緊挨著的不是bbb的串aaa
Replace
Replace中使用正則,第二個參數是函數!
<script type="text/javascript">
var str = 'aaZbbZccZ';
var s = str.replace(/(.*?)Z/g,
function(){
var ar = [];
for(var i=0;i<arguments.length;i++){
ar.push(arguments[i]);
}
alert(ar);
ar.length = 0;
return arguments[2];
}
);
alert(s);
</script>
當有反向引用時:
arguments[0]:匹配到的串
arguments[1]:$1
arguments[2]:$2
.............................
arguments[arguments.length-2]:匹配到的位置
arguments[arguments.length-1]:要匹配的字符串
否則,有3個形參:
arguments[0]:匹配到的串
arguments[1]:匹配到的位置
arguments[2]:要匹配的字符串
Replace應用
不用循环输出一至一百:
<script type="text/javascript">
var sAAA = new Array(100+1).join("a");
var sNum = sAAA.replace(/a/g,function(){
return arguments[1]+1+"<br/>"
});
document.write(sNum);
</script>
替換所有<>為[]:
<script type="text/javascript">
var str = '<a>a</a><b>b</b><c>c</c>';
var s = str.replace(/(<)|>/g,function(x,y){
return (y)?'[':']';
});
alert(s);
</script>


猜你喜欢
- 前言分享一个Vue前端导出Excel文件的方法。记录学习!功能需求:将表格的全部数据导出Excel格式的文件前端:Vue3+Element-
- 本文实例讲述了python条件变量之生产者与消费者操作。分享给大家供大家参考,具体如下:互斥锁是最简单的线程同步机制,面对复杂线程同步问题,
- MySQL5升级为MySQL8问题my.ini首先推荐一个软件“everything”,一个轻巧的遍
- 前言Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是“万恶之源”,这是前人总结的经验,不无
- python命名规则命名风格python几种不同命名风格驼峰式命名法(WjW)混合式命名法(wjWj)大写(WJWJWJ)或大写加下划线(W
- blankzheng的blog:http://www.planabc.net/margin在中文中我们翻译成外边距或者外补白(本文中引用外边
- 避坑1:RTX30系列显卡不支持cuda11.0以下版本,具体上限版本可自行查阅:方法一,在cmd中输入nvidia-smi查看方法二:由此
- 本文实例讲述了mysql报错:MySQL server version for the right syntax to use near t
- 先来描述一下我遇到的问题,在进行matplotlib学习时, plot.show() 总是无法成功运行,总是会报一个错:RuntimeErr
- 首先上一段程序:import numpy as nplist_a = list(range(10))print("list_a:
- 前言众所周知,python拥有丰富的内置库,还支持众多的第三方库,被称为胶水语言,随机函数库random,就是python自带的标准库,他的
- IF Exists(Select 1 From sysobjects Where Name='sp_search' And
- 由于本人经常使用笔记本共享WiFi,但是又不想笔记本开机一夜(为了低碳环保嘛 ~_~!),所以每次都要用使用DOS命令关机,感觉好麻烦。正好
- fnamtch就是filenamematch, 在python中利用符合linuxshell风格的匹配模块来进行文件名的匹配筛选工作。fnm
- 1.什么是JWTJWT(JSON Web Token)是一个非常轻巧的规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,
- JSON格式数据简介JSON 全称“JavaScript Object Notation”,译为&a
- 本文旨在介绍 vue-router 的实现思路,并动手实现一个简化版的 vue-router 。我们先来看一下一般项目中对 vue-rout
- PHP并非不能实现HTTP服务,一般来讲,这叫网络编程或Socket编程。在学习到其他语言的这部分的时候,一般的思路就是如何监听TCP实现一
- re正则表达式模块还包括一些有用的操作正则表达式的函数。下面主要介绍compile函数。 定义: compile(pattern[,flag
- 共有三种推导式列表(list)推导式字典(dict)推导式集合(set)推导式列表推导式基本语法:[out_express for out_