正则表达式

//正则表达式

//1.匹配特定的字符串
var str="asdkfhijlkjasdhialskdjfkhi";
var reg = new RegExp(/hi/);
var result = str.match(reg);

// 结果: ["hi", index: 5, input: "asdkfhijlkjasdhialskdjfkhi"] -- 数组

// /g 全局搜索
var reg = new RegExp(/hi/g);
var result = str.match(reg);
//结果: (3) ["hi", "hi", "hi"]

// /i忽略大小写
var reg =/Hi/gi;
var result = str.match(reg);
//结果: (3) ["hi", "hi", "hi"]

\b 单词分割 --- 英文中的单词由空格 都好 分号 句号 等 分割 但是 \b 它匹配的是一个位置 不是其中的任何一个
var reg = /\bhi\b/g
var str="abchiasd hi,asdf hisd ,hi asdf hi. "
var result = str.match(reg)
结果: (3) ["hi", "hi", "hi"]

匹配 hi后面不远处跟着一个Lucy
var str='abc hi asdkflsdjfjk Lucy asdkjflasdjf'
var reg = /\bhi\b.*\bLucy\b.*/ 含义: \b 单词开始 hi 匹配的字符 \b单词分割 .是元数据代表任何字符 * 任意个数重复
var result=str.match(reg);
结果: ["hi asdkflsdjfjk Lucy asdkjflasdjf", index: 4, input: "abc hi asdkflsdjfjk Lucy asdkjflasdjf"]

////以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字
var str='023-23223332'
var reg=/0\d\d-\d\d\d\d\d\d\d\d/
var result=str.match(reg);
结果:["023-23223332", index: 0, input: "023-23223332"] 这里的 \d 代表 0-9 的任意数字

//重复次数控制
var reg = /0\d{2}-\d{8}/
元数据 的大小写 基本是相反的意思 \d 0-9数字 \D 除此之外的 \w 所有字符 \W非字符

\s 代表空格 \S代表非空
var str='asdf asdfas asdfasd asdfasdf'
var reg=/\s/g
str.match(reg)
结果: (7) [" ", " ", " ", " ", " ", " ", " "]

var reg=/\S/g 非空字符
str.match(reg)
结果: (25) ["a", "s", "d", "f", "a", "s", "d", "f", "a", "s", "a", "s", "d", "f", "a", "s", "d", "a", "s", "d", "f", "a", "s", "d", "f"]

var reg=/\w/g
str.match(reg)
结果: (25) ["a", "s", "d", "f", "a", "s", "d", "f", "a", "s", "a", "s", "d", "f", "a", "s", "d", "a", "s", "d", "f", "a", "s", "d", "f"]


//以字母a开头的单词—
var reg = /\ba\w*\b/g


// 正则表达式的分支结构
匹配电话号码// (010)52414524 010-54585475
var str='(010)52414524' //010-54585475
var reg=/\(\d{3}\)\d{8}|\d{3}-\d{8}/ // 主要 是 | 这个或运算符代表只要有一个条件成立都会符合条件
var result=str.match(reg);


//分组 解决重复多个字符问题 用()来指定字表达式
//从字符串 asdf(010)52441414asdfasdf020-51441441asdfasd 中搜索出所有电话号码
var str='asdf(010)52441414asdfasdf020-51441441asdfasd'
var reg=/(\(\d{3}\)|\d{3}-)\d{8}/g
var result=str.match(reg)
结果:["(010)52441414", "020-51441441"]


//反义 与定义的相反的
元字符大写: \d 的反义\D \w 的反义\W \s的反义\S 等等
[]中反义 [abcdefg] 反义[^abcdefg]

//截取网页中input 输入框
var str='<html><body><h1>My First Heading</h1><p>My first paragraph.</p><input type=\'text\' name=\'abc\' value=\'123\' /><input type=\'hidden\' name=\'cba\' value=\'321\' /><input type=\'hidden\' name=\'aaa\' value=\'3231\' /></body></html>'
var reg=/<input[^>]+>/g
var result = str.match(reg);\
结果:["<input type='text' name='abc' value='123' />", "<input type='hidden' name='cba' value='321' />", "<input type='hidden' name='aaa' value='3231' />"]

//先后引用
用小括号括起来的分组都有一个分组编号 从左至右 分别为 1,2,3,4,5.....
后面可用通过 \编号重复匹配之前的分组
匹配下面字符串中的go
var str='asdfka go askdfjl go kasdlfkja go klasdfkl go lkasdlkfj go';


//零宽断言 ---匹配之前或者之后的字符是或者不是某个特定的字符
(?=exp) (?!exp) (?<=exp) (?<!exp)
var str='abcccbe def abing cding abcdfacb aaing bcding abcdefc testing';
var reg=/\b\w+(?=ing\b)/g
var result=str.match(reg);
结果:(5) ["ab", "cd", "aa", "bcd", "test"] //所有以ing结尾的单词

//贪婪和懒惰匹配
var str='aabaabbbabbdaaab';
var reg=/a\w*b/;
var result=str.match(reg);
结果:["aabaabbbabbdaaab", index: 0, input: "aabaabbbabbdaaab"]
贪婪匹配 就是一直到最后

懒惰匹配:
var str='aabaabbbabbdaaab';
var reg=/a\w*?b/
var result=str.match(reg)
结果:
["aab", index: 0, input: "aabaabbbabbdaaab"]
只要匹配到就可以了



posted @ 2017-11-30 14:23  ★Angel★  阅读(212)  评论(0编辑  收藏  举报