一:正则表达式的方法和修饰符:
正则的基本语法有2种
1直接量语法 ;如:/ab/g
2. 创建RegExp对象的方法;如: new RegExp(/abcd/,g);
- 正则的修饰符有三个:
- g:全局匹配
- i:执行对大小写不敏感匹配
- m:执行多行匹配
- 支持RegExp对象的属性有五种:
- global:RegExp对象是否具有标志g;
- ignoreCase:RegExp对象是否具有标志i;
- lastIndex :一个整数,表示开始下一次匹配的字符位置;
- multiline:RegExp对象是否具有标志。
- source:正则表达式的源文本。
- 支持RegExp对象的方法有三种:
- compile:编译正则表达式;
- exec :检索字符中指定的值,返回找到的值,并确定位置;
- test :检索字符串中指定的值,返回true或false。
- 支持正则表达式的String对象的方法有四种:
- search:检索与正则表达式相匹配的值;
- match : 找到一个或多个正则表达式的匹配;
- replace : 替换与正则表达式匹配的字符串;
- split :把字符串分割为字符串数组。
//一:创建 RegExp(pattern,attributes);
// new RegExp(pattern,attributes);
// 返回一个新的RegExp对象,具有指定的模式和标志;
// 1-1:支持正则表达式的string对象方法
// 1:search()方法;返回值:匹配的第一个位置,未找到,返回-1
var str = 'hello world,HElls worlds';
console.log(str.search(/lo/)); //3 返回匹配到的位置
console.log(str.search(/lo/g)); //3 还是返回第一个位置
console.log(str.search(/world/g));//6
console.log(str.search(/11/)); //-1 没有找到
console.log(str.search(/HElls/i));
//2. exec()方法:返回一个数组,存放匹配的结果,未找到返回null
var str2 = 'longen and yunxi';
console.log(/longen/.exec(str2)); //["longen", index: 0, input: "longen and yunxi"]
console.log(str2.match(/longen/));//["longen", index: 0, input: "longen and yunxi"]
console.log(str2.match(/longen/g));
console.log(/1111/.exec(str2)); // null
二:正则的方括号和小括号
//[abc] 匹配abc里面任意一个字符
var str = 'xuebangbang is programmer';
console.log(str.match(/[abc]/g)); //["b", "a", "b", "a", "a"]
//(xue|ge) 匹配里面的字符串xue或者ge
console.log(str.match(/(xue|ge)/g)); //["xue"]
//[^abc] 匹配不在abc里面的任意一个字符
console.log(str.match(/[^abc]/g)); //["x", "u", "e", "n", "g", "n", "g", " ", "i", "s", " ", "p", "r", "o", "g", "r", "m", "m", "e", "r"];
三:正则的元字符
// . 查找单个字符,除了换行和行结束符。
// \w 查找单词字符。
// \W 查找非单词字符。
// \d 查找数字。
// \D 查找非数字字符。
// \s 查找空白字符。
// \S 查找非空白字符。
// \b 匹配单词边界。
// \B 匹配非单词边界。
// \0 查找 NUL 字符。
// \n 查找换行符。
// \f 查找换页符。
// \r 查找回车符。
// \t 查找制表符。
// \v 查找垂直制表符。
// \xxx 查找以八进制数 xxx 规定的字符。
// \xdd 查找以十六进制数 dd 规定的字符。
// \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
// =============================================================================
//元字符用来匹配任何一个单字符
var str = 'xue-bang_bang is a programmer!';
// \w查找任意一个字母或下划线,等价于:/[A-Za-z0-9]/
console.log(str.match(/\w/g));//["x", "u", "e", "b", "a", "n", "g", "_", "b", "a", "n", "g", "i", "s", "a", "p", "r", "o", "g", "r", "a", "m", "m", "e", "r"]
console.log(str.match(/\w+/g));// ["xue", "bang_bang", "is", "a", "programmer"]
//\W查找任意一个非单词字符 等价于:/[^A-Za-z0-9_]/
console.log(str.match(/\W/g)); //["-", " ", " ", " ", "!"]
//\.查找任意个字符,除了换行符和结束符
console.log(str.match(/./g));//["x", "u", "e", "-", "b", "a", "n", "g", "_", "b", "a", "n", "g", " ", "i", "s", " ", "a", " ", "p", "r", "o", "g", "r", "a", "m", "m", "e", "r", "!"]
//\d匹配任意一个数字字符,等价于:/[0-9]/
var str2 = 'xue-bang_bang is 18 years old!'
console.log(str2.match(/\d/g)); //["1", "8"]
//\D 匹配任意一个非数字字符,等价于:/[^0-9]/
console.log(str2.match(/\D/g));//["x", "u", "e", "-", "b", "a", "n", "g", "_", "b", "a", "n", "g", " ", "i", "s", " ", " ", "y", "e", "a", "r", "s", " ", "o", "l", "d", "!"]
//\s 匹配任意空白,制表,换行符,等价于:/[\f\n\r\t\v]/
var str3 = 'xue-bang_bang is 18\nyears old!'
console.log(str2.match(/\s/g)); //[" ", " ", " ", " "]
//\s匹配任意非空白字符:等价于/[^\f\n\r\t\v]/
console.log(str3.match(/\S/g));//["x", "u", "e", "-", "b", "a", "n", "g", "_", "b", "a", "n", "g", "i", "s", "1", "8", "y", "e", "a", "r", "s", "o", "l", "d", "!"]
//\b匹配一个单词边界,就是指单词和空格间的位置,比如'er\b'可以匹配never中的er,但是不能匹配verb中的er
console.log(str3.match(/bang\b \bis\b/g)); //["bang is"]
//\B匹配非单词边界,er\B能匹配verb中的er,但是不匹配never中的'er'
console.log(str3.match(/an\B/g)); //["an", "an"]
//\n匹配一个换行符,用exec()返回换行符被找到的位置
console.log(/\n/g.exec(str3)); //["↵", index: 19, input: "xue-bang_bang is 18↵years old!"]
四:正则的量词
// n+ 匹配任何包含至少一个 n 的字符串。
// n* 匹配任何包含零个或多个 n 的字符串。
// n? 匹配任何包含零个或一个 n 的字符串。
// n{X} 匹配包含 X 个 n 的序列的字符串。
// n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
// n{X,} 匹配包含至少 X 个 n 的序列的字符串。
// n$ 匹配任何结尾为 n 的字符串。
// ^n 匹配任何开头为 n 的字符串。
// ?=n 匹配任何其后紧接指定字符串 n 的字符串。
// ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
//()里面的内容可以作为整体被修复
var str = 'xue-bang_bang is 18\nyears old!';
console.log(str.match(/an?/g)); //["an", "an", "a"]
console.log(str.match(/an+/g)); //["an", "an"]
console.log(str.match(/an*/g)); //["an", "an", "a"]
console.log(str.match(/an{1,2}/g)); //["an", "an"]
console.log(str.match(/an{2,}/g)); //null
console.log(str.match(/an{1}/g)); //["an", "an"]
console.log(str.match(/years\s*old!$/g)); //["years old!"]
console.log(str.match(/^xue*/g)); //["xue"]
//?=n的用法 :匹配任何其后紧接指定字符串n的字符串;
console.log(str.match(/xue(?=-)/g)); //["xue"]
//?!n的用法:匹配任何其后不紧接n的字符串
console.log(str.match(/an(?!b)/g)); //["an", "an"]
console.log(str.match(/(an|g_)/g)); //["an", "g_", "an"]
五:贪婪模式和非贪婪模式用法
Javascript中的正则贪婪与非贪婪模式的区别是:被量词修饰的子表达式的匹配行为;
1.贪婪模式在整个表达式匹配成功的情况下尽可能多的匹配;
贪婪模式量词如下:{x,y} , {x,} , ? , * , 和 +
2.非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配;
非贪婪模式量词:{x,y}?,{x,}?,??,*?,和 +?
//一:贪婪模式:
var str = '<script>我叫胖胖<\/script>1111<script>我来自中国<\/script>';
//贪婪模式
console.log(str.match(/<script>.*<\/script>/));
//非贪婪模式
console.log(str.match(/<script>.*?<\/script>/));
var str2 = '<script>我叫胖胖<\/script>1111<script>我来自中国1<\/script>222<script>我来自中国2<\/script>222';
//贪婪模式
console.log(str2.match(/<script>.*<\/script>222/));
// 非贪婪模式
console.log(str2.match(/<script>.*?<\/script>222/));
六:正则匹配的训练
var str = 'my name is bangbang; I am 18 years old';
var str2 = 'I am 18';
console.log(str2.match(/\d+$/g)); //["18"] 匹配以数字结尾的
console.log(str.replace(/\s/g,''));//mynameisbangbang;Iam18yearsold
console.log(/^\d*$\d/.test(str)); //判断字符串是不是由数字组成
// 分析:电话号码有区号(3-4位数字),区号之后使用 ”-” 与电话号码连接;
// 区号正则:^\d{3,4}
// 电话号码7~8位 正则 \d{7,8}
var str3 = '0379-18317713';
console.log(str3.match(/^\d{3,4}-\d{7,8}(-\d{3,4})?$/)); //电话号码正则
//手机号码
var str3 = '18317713031';
console.log(str3.match(/^1[3|4|5|7|8]\d{9}$/));
//删除字符串左右空格
var str4 = ' my name is bangbang ';
console.log(str4.replace(/^\s+|\s+$/g,'')); //my name is bangbang
//匹配标签中的内容
var str5 = '<ul><li>111</li><li>22222</li></ul>';
console.log(str5.match(/<ul>([\s\S]+?)<\/ul>/g));
参考网址:http://www.cnblogs.com/tugenhua0707/p/5037811.html#_labe1