js正则表达式
Posted tutuj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js正则表达式相关的知识,希望对你有一定的参考价值。
一、正则表达式基础
正则表达式(Regular Expression)是对文本或者字符的匹配和替换,匹配的是位置或者字符。
首先正则匹配不仅仅能够实现精确匹配,还可以实现模糊匹配。可以分为两种:横向匹配和纵向匹配。
横向匹配:就是匹配的字符的数量可以在一个范围内。可以同量词来实现。如:
var regex = /ab2,5c/g; //g代表全局匹配,表示在全局范围内可以匹配前面一个a,后面跟了最少两个最多5个b最后跟了一个c的字符串。 var string = "abcabbcabbbcabbbbcabbbbbcabbbbbbc"; console.log( string.match(regex) ); ////["abbc", "abbbc", "abbbbc", "abbbbbc"]
纵向匹配:是指匹配到一位字符的时候可以匹配到多种可能,可以用字符组来实现。如:
var regex = /a[abc]c/g; //表示在全局范围内匹配前面一个字符是a,后面一个字符是a或者b或者c的字符,最后一个字符是c的字符串。 var string = "abc aac acc"; console.log( string.match(regex) ); ////["abc","aac","acc"]
接下来来看一下正则表达式的匹配:
1、量词,就是重复的数量。
m 等价于m,m,表示出现m次。
m,表示至少出现m次。
m,n 表示至少出现m次,至多出现n次。
? 等价于0,1,表示出现0次或者1次。 + 等价于1,,表示出现至少一次。 * 等价于0,,表示出现0次或者多次。
2、字符组,用字符的特定含义来匹配。
\d就是[0-9]。表示是一位数字。其英文是digit(数字)。 \D就是[^0-9]。表示除数字外的任意字符。 \w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。w是word的简写,也称单词字符。 \W是[^0-9a-zA-Z_]。非单词字符。 \s是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。s是space character的首字母。 \S是[^ \t\v\n\r\f]。非空白符。 .就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。
3、正则表达式的修饰符
ignoreCase:RegExp对象是否含有修饰符i,表示对大小写不敏感的匹配。
global: RegExp对象是否含有修饰符g,表示进行全局的匹配。
multiline: RegExp对象是否含有修饰符m,表示进行多行匹配。
source: 显示正则表达式函数体。
4、正则表达式的定位符
^ (脱字符):匹配输入字符串的开始位置
$ :匹配输入字符串的结束位置
\b :匹配一个单词边界
\B :匹配非单词边界
(?=p):p是一个子模式,表示p前面的位置,positive lookahead 正向先行断言。
(?!p):表示除开P前面的位置,negative lookahead负向先行断言。
注意: ^ 放在字符簇中是取反的意思,放在整个表达式中是开始位置;
二、正则表达式操作方法
正则操作的方法,共有6个,字符串4个,正则3个:
String#search
String#split
String#match
String#replace
RegExp#test
RegExp#exec
RegExp#compile
正则表达式方法:
test:用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
var patt1=new RegExp("e"); document.write(patt1.test("The best things in life are free")); ////true
exec:用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
var patt1=new RegExp("e"); document.write(patt1.exec("The best things in life are free")); ////e
compile:用于改变 RegExp,compile() 既可以改变检索模式,也可以添加或删除第二个参数
var patt1=new RegExp("e"); document.write(patt1.test("The best things in life are free")); ////true patt1.compile("d"); document.write(patt1.test("The best things in life are free")); ////false
字符串对象的方法:
match:找到一个或多个正则表达式的匹配。返回匹配值。
var regex = /a[abc]c/g; var string = "abc aac acc"; console.log( string.match(regex) ); ////["abc","aac","acc"]
search:用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置.
var regex = /a[abc]c/g; var string = "bcaaacacc"; console.log( string.search(regex) ); ////3
split:拆分字符串。
var regex = /,/g; var string = "html,css,javascript"; console.log( string.split(regex) ); ////["html", "css", "javascript"]
replace: 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
var regex = /,/g; var string = "html,css,javascript"; console.log( string.replace(regex,"!") ); ////html!css!javascript
以上是关于js正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性