1,什么叫做正则表达式
正则表达式(regular expression 简称 regexp)是一种描述字符串结构的语法规则,正则表达式是一个特定格式化模式,用于验证各种字符串是否匹配这个特征值,进而实现高级的文本查找,替换和截取内容等操作。
2,如何创建正则表达式
1,字面量方式创建正则表达式
在字符前后加上//。
let str="chenaxstts";
/c/.test(str)
2,使用对象创建正则表达式
var patt=new RegExp(pattern,modifiers);
- pattern(模式) 描述了表达式的模式
- modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
let ss= new RegExp("c","g");
console.log( ss.test("ccc*"))
修饰符
修饰符 | 描述 |
i | 执行对大小写不敏感的匹配 |
g | 执行全局匹配(查找所有匹配而非找到第一个匹配后停止) |
m | 执行多行匹配 |
注意:当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。比如,以下是等价的:
var re = new RegExp("\\w+");
var re = /\w+/;
// 把字面量创建的\转译成对象创建的\\
3,使用方法
RegExp对象方法
方法 | 描述 |
exec | 检索字符串中指定的值,返回找到的值,并确定其位置 |
test | 检索字符串中指定的值,返回true和false |
toString | 返回正则表达式的字符串 |
//exec的使用
var str="world Hello";
var patt=/Hello/g;
console.log(patt.exec(str))
//['Hello', index: 6, input: 'world Hello', groups: undefined]
var str="world Hello";
var patt=/Hello/g;
console.log(patt.test(str))
var patt = new RegExp("RUNOOB", "g");
var res = patt.toString();
console.log(res)
支持正则表达式string对象的方法
方法 | 描述 |
search | 检索与正则表达式相匹配的值 |
match | 找到一个或多个正则表达式的匹配。 |
replace | 替换与正则表达式匹配的子串。 |
split | 把字符串分割成字符串数组 |
- search 方法
//search方法仅用于字符串查找
var str="Mr. Blue has a blue house";
console.log(str.search(/blue/i))
//4
- match方法
var str="你好 hello"
var result= str.match(/hello/g)
console.log(result)
/['hello']
- replace方法
语法string.replace(regexp|substr, newValue|function)
参数值
searchValue (必须,规定子字符串或要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。)
newValue (用于替换第一个参数所匹配到的字符 。(该参数中可以使用特殊的变量名。详见下面? 特殊变量名))
变量名 | 代表的值 |
$& | 替换与正则相匹配的字符串 |
$`(键盘tab上面的键) | 替换匹配字符串左边的字符 |
$‘(键盘enter旁边的键) | 替换 匹配字符串右边的字符 |
$n | 替换$1,$2,$,3,…,$n 匹配结果中对应的分组匹配结果 |
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/正则表达式/,'《$&》');
// 得到:"讨论一下《正则表达式》中的replace的用法"
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/正则表达式/,'《$`》');
// 得到:"讨论一下《讨论一下》中的replace的用法"
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/正则表达式/,"《$'》");
// 得到:"讨论一下《中的replace的用法》中的replace的用法"
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/(正则)(.+?)(式)/,"《$1》$2<$3>");
// 得到:"讨论一下《正则》表达<式>中的replace的用法"
function( 用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。(详见 下面? 函数作为参数)
String.replace(regexp|substr,function(match, p1, p2, p3, offset, string){})
变量名 | 代表的值 |
match | 匹配的子串 |
p1, p2, … | 假如replace()方法的第一个参数是一个RegExp对象,则代表第n个括号匹配的字符串 (如:/(\a+)(\b+)/ 这个正则来匹配,则p1就是匹配的\a+, p2就是匹配的\b+) |
offset | 匹配到的子字符串在原字符串中的偏移量(即第其左侧有几个字符) |
string | 被匹配的原字符串 |
NamedCaptureGroup | 命名捕获匹配的对象 |
var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/(正则).+?(式)/,function() {
console.log(arguments);
});
// ["正则表达式", "正则", "式", 4, "讨论一下正则表达式中的replace的用法"]
var sStr='讨论一下正则表达式中的replace的正则表达式用法';
sStr.replace(/(正则).+?(式)/g,function() {
console.log(arguments);
});
// ["正则表达式", "正则", "式", 4, "讨论一下正则表达式中的replace的正则表达式用法"]
// ["正则表达式", "正则", "式", 19, "讨论一下正则表达式中的replace的正则表达式用法"]
3个重要的正则符号
括号
方括号"[" 内是需要匹配的字符(字符类/字符组)
花括号“{”内是指匹配字符的数量(量词)
圆括号 “(” 用来分组的
插入符号
“^” 表示正则开始
美元符号
美元符号“$”表示正则结束
- 字符组
需要强调的是,虽叫字符组(字符类),但只是其中一个字符。例如[abc]
,表示匹配一个字符,它可以是“a”、“b”、“c”之一。
表达式 | 描述 |
[abc] | 查找方括号之间的任何字符。 |
[^abc] | 查找任何不在方括号之间的字符。 |
[0-9] | 查找任何从0至9的数字 |
[a-z] | 查找任何从小写a到小写z的字符。 |
[A-Z] | 查找任何大写A到大写Z的字符。 |
[A-z] | 查找任何大写A到小写z的字符 |
[adgk] | 查找给定集合内的任何字符 |
[^adgk] | 查找给定集合外的任何字符 |
(red|blue|green) | 查找任何指定的选项。 |
- 元字符
元字符(Metacharacter)是拥有特殊含义的字符:
.元字符 | 描述 |
. | [^\n\r\u2028\u2029] 。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号...中的每个点,都可以理解成占位符,表示任何类似的东西 |
\w | [0-9a-zA-Z_] 。表示数字、大小写字母和下划线。记忆方式:w是word的简写,也称单词字符。 |
\W | [^0-9a-zA-Z_] 。非单词字符。 |
\d | 即 [0-9] 查找数字 其英文是digit(数字) |
\D | [^0-9] 。表示除数字外的任意字符。 |
\s | [ \t\v\n\r\f] 。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s是space character的首字母。 |
\S | 非空白符。 |
\b | 匹配单词边界(不会消耗任何字符只匹配一个位置 boundary) |
\B | 匹配非单词边界 |
\0 | 查找null字符 |
\n | 查找换行符(newline) |
\f | 查找换页符 (form feed) |
\r | 查找回车符 (return) |
\t | 查找制表符 (tabs) |
\v | 查找垂直制表符(vertical) |
\xxx | 查找以八进制数xxx规定的字符 |
\xdd | 查找以十六进制数dd规定的字符 |
\uxxxx | 查找以十六进制数xxxx规定的Unicode字符 |
量词(部分{}中的语法)
量词 | 描述 |
n+ | (出现一次或者多次(至少出现一次)) 等价于 |
n* | 匹配任何包含零个或多个 n 的字符串。出现0次或者多次(任意次) 等价于 |
n? | 等价于 |
{n} | 匹配出现n次 |
{n,} | 匹配至少出现n次 |
{n,m} | 出现n到m次 |
n$ | 匹配任何结尾为 n 的字符串。 |
^n | 匹配任何开头为 n 的字符串。 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |