[AaronYang]那天有个小孩跟我说Js正则
按照自己的思路学习Node.Js 随心出发。突破正则冷门知识点,巧妙复习正则常用知识点
标签:AaronYang 茗洋 Node.Js 正则 Javascript
本篇博客地址:http://www.cnblogs.com/AaronYang/p/3979710.html
开发准备(AaronYang原味)(看完加20分)
1你需要有个带开发者工具的浏览器,我这里用chrome浏览器
2基础回顾,比较简洁

var hello="hello world";
var reg=/hello world/;
alert(reg.test(hello)) //输出 true
var reg=/\bhello world\b/;
第二个正则-----复习正则基本格式
学会 斜杠类字符(\w \d .) 寓意 加 特殊字符( * + ? {明确数字}) 加 正则外的额外说明(g i) 加 正则的额外切割整体和部分的字符(^$ 还有 ()括弧 | )
1. \w 字母或数字或下划线或汉字,记忆技巧 网站用户名注册可以中文
\d 数字,这个太好记了,因为常用
. 换行符以外的任意字符
\s 任意空白符,记忆技巧s是space的缩写,space是键盘上的空格键,空白的
跟\d 相反匹配的 \D ,\W,\S \B 等 。例如\d表示匹配数字,\D就是所有非数字以外的字符
\d -> [0-9]
\D -> [^0-9]
\w -> [a-zA-Z0-9_]
\W ->[^a-zA-Z0-9]
2. 有的 字符 比如 . 号,他不带斜杠,表示正则匹配符号,如果你想匹配 .net 这个字符,你就用 \. 来替代 点号。 斜杠是转义字符,如果你匹配的字符是正则已经预定义好的,你就要用斜杠来转义了
3. 对字符的附加说明
例如 \d+ 这里的+号表示 1个以上,\d表示数字,整句话的意思就是 1个以上的数字,加号等同于 {1,} 所以正则也可以这样写 \d{1,}
? 表示 0个或者1个 *号表示 0个或者很多个
接下来就是花括号类型的 说明 {1} 表示 1个
{1,}表示不少于1个
{1,10}表示 不少于1个,不超过10个
4. /g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个
/i 表示匹配的时候不区分大小写
/m 表示多行匹配,什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号,有的字符串含有\n也就是多行
5. 其他的
[输入任意字符] 例如 11[029] 表示 匹配110,112,119的字符
[a-z0-9A-Z_] 跟 \w有点像(不考虑中文)
[^123]表示匹配除了1,2,3这3个字符以外的任意字符
.* 表示匹配 任意数量的不包含换行的字符
6. 使用子匹配
可以使用( )进行字匹配
var osVersion = "Ubuntu 8";//其中的8表示系统主版本号
re=/^[a-z]+\s+(\d+)$/i;//用()来创建子匹配
arr =re.exec(osVersion);
alert(arr[0]);//整个osVersion,也就是正则表达式的完整匹配
alert(arr[1]);//8,第一个子匹配,事实也可以这样取出主版本号
alert(arr.length);//2
如果把字符也括起来,则又是一组
7. 反向引用
反向引用标识由正则表达式中的匹配组捕获的子字符串。每个反向引用都由一个编号或名称来标识,并通过“\编号”表示法进行引用。
var color = "#990000";
/#(\d+)/.test(color);
alert(RegExp.$1);//
alert(/(ay)\1/.test("ayay"))//true
re = /(\d+)\s(\d+)/;
str = "1234 5678";
alert(str.replace(re,"$2 $1"));//在这个里面$1表示第一个分组1234,$2则表示5678
alert(RegExp.$2)
中级正则 学习(看完加30分)
1零宽断言 (匹配但是不捕获,不捕获就是不返回值)






2贪婪和惰性,贪婪长,懒惰多
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复。
例子:
比如 ay2013ay2014ay2012ay2014
第一个是贪婪模式,从左往右,以20开始,找4结尾,取最长的一个字符串
第二个是懒惰模式,从左往右,以20开始,找最近的4,组成一个值,然后继续找,组成其他值,最后数组返回
看replace方法,都是先match值,然后替换的
3注释(知道就好)
Regex regex = new Regex(@"\ba\w{6}\b", RegexOptions.IgnoreCase); 主要在RegexOptions中 RegexOptions.IgnorePatternWhitespace,忽略表达式中的非转义空白并启用由#标记的注释
例如:
高级正则 学习(看完加30分)
1递归组,平衡匹配,这个有点拗口,主要是分组吧
<div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions; namespace RegMy
{
class Program
{
static void Main(string[] args)
{
Regex reg = new Regex("(?<=<a\\s*.*href=\")[^\"]*(?=\")", RegexOptions.IgnoreCase); string text = "<a href=\"http://www.baidu.com/p/yangyanghaoran?from=zhidao\" class=\"user-name\" target=\"_blank\" id=\"user-name\">yangyanghaoran<i class=\"i-arrow-down\"></i></a><a href=\"333.html\"></a>";
Match m = reg.Match(text);
while (m.Success)
{ //显示匹配开始处的索引值和匹配到的值
Console.WriteLine("Match=[" + m + "]");
CaptureCollection cc = m.Captures;
foreach (Capture c in cc)
{
Console.WriteLine("\tCapture=[" + c + "]");
}
for (int i = ; i < m.Groups.Count; i++)
{
Group group = m.Groups[i];
System.Console.WriteLine("\t\tGroups[{0}]=[{1}]", i, group);
for (int j = ; j < group.Captures.Count; j++)
{
Capture capture = group.Captures[j];
Console.WriteLine("\t\t\tCaptures[{0}]=[{1}]", j, capture);
}
}
//进行下一次匹配.
m = m.NextMatch();
} Console.ReadLine();
}
}
}
效果图:
这一块跟js的正则有点偏了,这里感兴趣的自己百度学习吧
=====================================================================================
备注:
正则表达式对象的方法
test,返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。如果存在则返回 true,否则就返回 false。
exec,用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
compile,把正则表达式编译为内部格式,从而执行得更快。
match,找到一个或多个正则表达式的匹配。
replace,替换与正则表达式匹配的子串。
search,检索与正则表达式相匹配的值。
split,把字符串分割为字符串数组。
正则表达式对象的属性
source,返回正则表达式模式的文本的复本。只读。
lastIndex,返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。
$1...$9,返回九个在模式匹配期间找到的、最近保存的部分。只读。
input ($_),返回执行规范表述查找的字符串。只读。
lastMatch ($&),返回任何正则表达式搜索过程中的最后匹配的字符。只读。
lastParen ($+),如果有的话,返回任何正则表达式查找过程中最后括的子匹配。只读。
leftContext ($`),返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符。只读。
rightContext ($'),返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读。
[AaronYang]那天有个小孩跟我说Js正则的更多相关文章
- [AaronYang]那天有个小孩跟我说Js-NodeJS[AY0]-EJS
按照自己的思路学习Node.Js 随心出发.EJS是Node.js中express框架中使用的一个模版引擎,当然还有Jade 我的学习就靠网上查资料,没有买书系统学,自己整理,如果有用了哪位大神的代码 ...
- 那天有个小孩教我WCF[一][2/3]
接着上次的继续讲吧 我们开始吧 9.创建数据库 use master go --创建库 if exists(select * from sysdatabases where name='NewsDB' ...
- 那天有个小孩教我WCF[一][1/3]
那天有个小孩教我WCF[一][1/3] 既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈 前言: 第一篇嘛,不细讲,步步教你创建一个简单SOA案例,对WCF有个基本的认识,我不 ...
- (转)那天有个小孩教我WCF[一][1/3]
原文地址:http://www.cnblogs.com/AaronYang/p/2950931.html 既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈 前言: 第一篇嘛,不 ...
- 那天有个小孩跟我说LINQ(五)转载
2 LINQ TO SQL(代码下载) 我们以一个简单的销售的业务数据库为例子 表结构很简单:Users(购买者(用户)表),Products(产品信息表),Sales(销 ...
- 那天有个小孩跟我说LINQ(三)转载
1 LINQ TO Objects续2(代码下载) 新建项目 linq_Ch3控制台程序 1.1 操作字符串 ①查找字符串中包含的大写字母,字符串是由多个char类型组 ...
- 那天有个小孩跟我说LINQ(八)学会Func
文章已经迁移到:http://www.ayjs.net/2013/08/68/ 文章已经迁移到:http://www.ayjs.net/2013/08/68/ 文章已经迁移到:http://www.a ...
- 那天有个小孩跟我说LINQ(七)转载
1 LINQ TO XML(代码下载) 准备:新建项目 linq_Ch7控制台程序,新建一个XML文件夹,我们就轻松地学习一下吧 XDocument ...
- 那天有个小孩跟我说LINQ(六)转载
2 LINQ TO SQL完结(代码下载) 我们还是接着上次那个简单的销售的业务数据库为例子,打开上次那个例子linq_Ch5 2.1 当数据库中的表建立了主外键 ①根据主键获取子表信息 ...
随机推荐
- Educational Codeforces Round 26-D. Round Subset
题目大意:给你n个数字(小于1e18),从n个数中取k个数字相乘,使其后缀0最多,问你后缀0最多是多少. 知道得用三维的dp[ i ] [ j ] [ k ] 第一维表示用到第 i 个数为止,j 表 ...
- Nginx 关键字详解
转自: https://blog.csdn.net/zhangliangzi/article/details/78257593 1.[alias]——别名配置,用于访问文件系统,在匹配到locatio ...
- 001 Python中的基本类型初步介绍
这个但是根据书来整理的,显得有些多,也不够完整. 一:介绍 1.为什么使用内置对象 对象类型是语言的一个部分 内置对象构成了每个python程序的核心部分 二:数字 1.**是乘方 2.math数学模 ...
- hdu 1166 敌兵布阵【线段树】(求给定区间和)
题目链接:https://vjudge.net/contest/182746#problem/B 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) ...
- STL中实现 iterator trail 的编程技巧
STL中实现 iterator trail 的编程技巧 <泛型编程和 STL>笔记及思考. 这篇文章主要记录在 STL 中迭代器设计过程中出现的编程技巧,围绕的 STL 主题为 (迭代器特 ...
- {}+[]与console.log({}+[])结果不同?从JavaScript的大括号谈起
看到这样一个问题:为什么直接在控制台运行{} + []和用console.log({} + [])输出,两者结果不一样? 于是乎打开chrome的控制台运行了一下: 为什么结果会这样呢?不得已学习一下 ...
- u3d 鼠标点击位置,物体移动过去。 U3d mouse clicks position, objects move past.
u3d 鼠标点击位置,物体移动过去. U3d mouse clicks position, objects move past. 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱: ...
- 洛谷.3273.[SCOI2011]棘手的操作(左偏树)
题目链接 还是80分,不是很懂. /* 七个操作(用左偏树)(t2表示第二棵子树): 1.合并:直接合并(需要将一个t2中原有的根节点删掉) 2.单点加:把这个点从它的堆里删了,加了再插入回去(有负数 ...
- BZOJ.1010.[HNOI2008]玩具装箱toy(DP 斜率优化/单调队列 决策单调性)
题目链接 斜率优化 不说了 网上很多 这的比较详细->Click Here or Here //1700kb 60ms #include<cstdio> #include<cc ...
- BZOJ.3545.[ONTAK2010]Peaks(线段树合并)
题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. \(Solut ...