JS RegExp -- JavaScript 正则表达式

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. 忽略大小写 ,没有则结果是完全匹配才行。

Check whether or not the "i" modifier is set:
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. 

该修饰语所执行的是大小写敏感、在找到第一个结果时停止的匹配

Check whether or not the "m" modifier is set:
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 

这篇文章写得很好,需要的时候可以查阅。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值