- 正则表达式可以通过RegExp类来表示
- 正则表达式字面量被包在一对斜杠中
const re1=/going/; //搜索going的正则表达式
const re2=new RegExp("going"); //使用对象构造器的等价形式
- text() 搜索字符串指定的值,根据结果并返回真或假。
- exec() 检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
- match() 找到一个或多个正则表达式的匹配。
//匹配所有包含4个或4个以上字母的单词
const str="As I was going to ShanXi";
const re=/\w{4,}/ig;
str.match(re); //["going","ShanXi"]
str.search(re); //9 (首次出现满足表达式单词的下标)
re.test(str); //true
re.exec(str); //["going",index:9,input:"As I was going to ShanXi"]
re.exec(str); //["ShanXi",index:18,input:"As I was going to ShanXi"]
re.exec(str); //null -匹配完毕
//也可直接使用字面量语法
str.match(/\w{4,}/ig);
/\w{4,}/ig.test(str);
字符集 |
等价物 |
注释 |
\d |
查找数字 [0-9] |
|
\D |
查找非数字 [^0-9] |
|
\s |
查找空格 [\t\v\n \r] |
包含制表符空格和垂直制表符 |
\s |
查找非空格 [^\t\v\n \r] |
|
\w |
查找字母 [a-zA-Z] |
破折号和句号没有被包含进来,不能用于域名和CSS类 |
\W |
查找非字母 [^a-zA-Z] |
|
重复修饰符 |
描述 |
示例 |
{n} |
精确n次 |
/d{5}/ 匹配5位数字 |
{n,} |
至少n次 |
/d{5,}/ 匹配5位或5位以上的数字 |
{n,m} |
至少n次,最多m次 |
/d{5,7}/ 匹配5位到7位的数字 |
? |
0或1次,等价于{0,1} |
/[a-z]\d?/i 匹配跟随了0个或1个数字的字母 |
* |
0个或多次 |
/[a-z]\d*/i 匹配跟随了0个或多个数字的字母 |
+ |
1次或多次 [^a-zA-Z] |
/[a-z]\d+/i 匹配至少跟随1个数字的字母 |
- ^ :用于匹配字符串开始
- $:匹配字符串结束
注: (/^ :开始。[^: 取反)
(m 可以把字符串当做多行字符串处理)
//锚点
const input="It was the best of times";
const begin=input.match(/^\w+/g); //"It"
const end=input.match(/\w+$/g); //"times"
const all=input.match(/^\w.*$/g); //"It was the best of times"
const all=input.match(/^it/ig); //"It"
//m多行字符串的应用
const input="One line\nTwo lines\nThree lines";
const begin=input.match(/^\w+/mg); //["One","Two","Three"]
const end=input.match(/\w+$/mg); //["line","lines","lines"]
//去空格的处理
const input=" nice,you are right ";
const left=input.replace(/^\s*/g,""); //去除左边空格
const left=input.replace(/\s*$/g,""); //去除右边空格
const both=input.replace(^/\s*|\s*$/g,""); //去除两边空格
const all=input.replace(/\s*/g,""); //去除所有空格
--//注:str.trim() ,jquery,$.trim(str) 局限性不能去除中间的空格,正则表达式可以
- 贪婪匹配,贪婪匹配
正则表达式默认是贪婪的,匹配时直到表达式后面不会有同样的表达式才会停止,
贪婪匹配变懒惰匹配:只需在所有的重复元字符后面跟随一个问号,即可变成懒惰的
//贪婪
const input="<i>greedy</i>and<i>lazy</i>matching";
input.replace(/<i>(.*)<\/i>/ig,'<strong>$1</strong>')
运行结果: "<strong>greedy</i>and<i>lazy</strong>matching";
//变成懒惰匹配
input.replace(/<i>(.*?)<\/i>/ig,'<strong>$1</strong>')
运行结果: "<strong>greedy</strong>and<strong>lazy</strong>matching";