Intro
RegExp is short for regular expression, which is an object that describes a pattern of characters.
正则表达式是用于描述一种字符模式的对象。
It can be used for parsing 语法分析, format checking 格式检查, substitution 替换 and more.
(pattern-matching and "search-and-replace" functions on text)
可用于字符的模式匹配、文字的查找和替换。
完整的官方reference在这里:点击打开链接
Syntax
var patt=new RegExp(pattern,modifiers); //or more simply:
var patt=/pattern/modifiers;
modifier 修饰语:
The i modifier is used to perform case-insensitive matching. 忽略大小写 ,没有i 则结果是完全匹配才行。
var str = "Visit W3Schools!";
var patt1 = /W3S/i;
var res = patt1.ignoreCase; // true
The g modifier is used to perform a global match (find all matches rather than stopping after the first match). 查找所有匹配项,而不是找到第一个即停止。
Check whether or not the "g" modifier is set:
var str = "Visit W3Schools!";
var patt1 = /W3S/g;
var res = patt1.global; // true
The m modifier is used to perform multiline matching. 多行匹配
The m modifier is case-sensitive and will stop the search after the first match.
该修饰语所执行的是大小写敏感、在找到第一个结果时停止的匹配
var str = "Visit W3Schools!";
var patt1 = /W3S/gi; // "g" and "i" is set, "m" is not.
var res = patt1.multiline; // true
RegExp 的方法
test() method searches a string for a specified value, and returnstrue orfalse, depending on the result.
查询是否包含符合正则表达式的字符串,返回true或false。
exec() method searches a string for a specified value, and returns the first match. If no match is found, it returns null.
除了查找功能,返回第一个匹配的所查找的text,没找到返回值是null。
Examples:
节选自这里: 点击打开链接
1. test(), i modifier, ^, $, \s, [ ]
var re = /he/; //最简单的正则表达式,将匹配he这个单词
var str = "he";
alert(re.test(str)); //true
str = "we";
alert(re.test(str)); //false
str = "HE";
alert(re.test(str)); //false,大写
re = /he/i;
alert(re.test(str)); //true
str = "Certainly!He loves her!";
alert(re.test(str)); //true,只要包含he(HE)就符合
re = /^he/i; //脱字符(^)代表字符开始位置
alert(re.test(str)); //false,因为he不在str最开始
str = "He is a good boy!";
alert(re.test(str)); //true
re = /^he$/i; //$表示字符结束位置
alert(re.test(str));//false
str = "He";
alert(re.test(str));//true
//当然,这样不能发现正则表达式有多强大,因为我们完全可以在上面的例子中使用==或indexOf
re = /\s/;// \s匹配任何空白字符,包括空格、制表符、换页符等等
str= "user Name";//用户名包含空格
alert(re.test(str));//true
str = "user Name";//用户名包含制表符
alert(re.test(str));//true
re=/^[a-z]/i;//[]匹配指定范围内的任意字符,这里将匹配英文字母,不区分大小写
str="variableName";//变量名必须以字母开头
alert(re.test(str));//true
str="123abc";
alert(re.test(str));//false
2. n+, exec(), \d
var osVersion = "Ubuntu 8";//其中的8表示系统主版本号
var re = /^[a-z]+\s+\d+$/i; //n+号表示字符至少要出现1次,\s表示空白字符,\d表示一个数字
alert(re.test(osVersion));//true,但我们想知道主版本号
//另一个方法exec,返回一个数组,数组的第一个元素为完整的匹配内容
re=/^[a-z]+\s+\d+$/i;
arr = re.exec(osVersion);
alert(arr[0]);//将osVersion完整输出,因为整个字符串刚好匹配re
//我只需要取出数字
re=/\d+/;
var arr = re.exec(osVersion);
alert(arr[0]);//8
3. ( ), 子串匹配
//exec返回的数组第1到n元素中包含的是任意一个子匹配
re=/^[a-z]+\s+(\d+)$/i;//用()来创建子匹配
arr =re.exec(osVersion);
alert(arr[0]);//整个osVersion,也就是正则表达式的完整匹配
alert(arr[1]);//8,第一个子匹配,事实也可以这样取出主版本号
alert(arr.length);//2
osVersion = "Ubuntu 8.10";//取出主版本号和次版本号
re = /^[a-z]+\s+(\d+)\.(\d+)$/i;//.是正则表达式元字符之一,若要用它的字面意义须转义
arr = re.exec(osVersion);
alert(arr[0]);//完整的osVersion
alert(arr[1]);//8
alert(arr[2]);//10
4. replace(), split(), search()
var str ="some money";
alert(str.replace("some","much"));//much money
//replace的第一个参数可以为正则表达式
var re = /\s/;//空白字符
alert(str.replace(re,"%"));//some%money
//在不知道字符串中有多少空白字符时,正则表达式极为方便
str ="some some \tsome\t\f";
re = /\s+/;
alert(str.replace(re,"#")); //但这样只会将第一次出现的一堆空白字符替换掉
//因为一个正则表达式只能进行一次匹配,\s+匹配了第一个空格后就退出了
re = /\s+/g; //将使正则表达式匹配整个字符串
alert(str.replace(re,"@"));//some@some@some@
var str = "a-bd-c";
var arr = str.split("-"); //返回["a","bd","c"]
//如果str是用户输入的,他可能输入a-bd-c也可能输入a bd c或a_bd_c,但不会是abdc(这样就说他输错了)
str = "a_db-c";//用户以他喜欢的方式加分隔符s
re=/[^a-z]/i; //匹配任何不在指定范围内的字符,这里将匹配除字母处的所有字符
arr = str.split(re); //仍返回["a","bd","c"];
//在字符串中查找时我们常用indexOf,与之对应用于正则查找的方法是search
str = "My age is 18.Golden age!"; //年龄是不确定的,不能使用indexOf查找它的位置
re = /\d+/;
alert(str.search(re));//返回查找到的字符串开始下标10
//注意,因为查找本身就是出现第一次就立即返回
//下面的代码虽然不出错,但g标志是多余的
re=/\d+/g;
alert(str.search(re));//仍然是10
5. match()
var str = "My name is CJ.Hello everyone!";
var re = /[A-Z]/;//匹配所有大写字母
var arr = str.match(re);//返回数组
alert(arr);//数组中只会包含一个M,因为我们没有使用全局匹配
re = /[A-Z]/g;
arr = str.match(re);
alert(arr);//M,C,J,H
//从字符串中抽取单词
re = /\b[a-z]*\b/gi;//\b表示单词边界
str = "one two three four";
alert(str.match(re));//one,two,three,four
这篇文章写得很好,需要的时候可以查阅。