美文网首页
JS的正则表达式使用

JS的正则表达式使用

作者: 维仔_411d | 来源:发表于2018-10-24 20:18 被阅读0次

本文主要内容有三点:

1. 正则表达式主体和修饰符 说明;

2. String对象 使用正则表达式搜索字符串;

3. 正则表达式对象(RegExp)使用正则表达式搜索字符串

  • 字面量方式创建:/正则表达式主体/修饰符(可选)
  • RegExp实例方式创建:new RegExp('正则表达式主体','修饰符'(可选))

修饰符:

意义
i 忽略大小写(对大小写不敏感)
g 全局匹配(查找所有匹配项,而不是查找到第一个匹配项后停止)
m 多行匹配(将字符串识别为多行而不是一行,^为一行的开头,$为一行的结尾,换行符为\n)

表达式:

意义
^ 字符串开头
$ 字符串结尾
. 匹配除了换行符(\n)和行结束符(windows CR+LF, Mac CR, Unix LF,)
? 0或1个 ?前面的字符
+ 一或多个 +前面的字符
* 0或多个 *前面的字符
n{X} 匹配X个连续模式n
n{X,Y} 匹配X到Y个连续模式n
n{X,} 匹配X或以上个连续模式n
x(?=n) 匹配x后紧接着字符串n的字符串x
x(?!n) 匹配x后没有紧接着字符串n的字符串x

括号

意义
[abc] 查找括号内的任意字符
[^abc] 查找不在括号内的任意字符
(red|blue|green) 查找任何指定的选项
[0-9] 查找任何0到9的数字
[A-Z] 查找任何A到Z的字符
[a-z] 查找任何a到z的字符
[A-z] 查找任何A到z的字符

元字符

意义
\w 单词字符,即[0-9]|[A-z]| _
\W 非单词字符
\d 数字
\D 非数字
\s 空白字符
\S 非空白字符
\b 单词边界
\B 非单词边界
\0 NULL字符
\n 换行符
\f 换页符
\r 回车符
\t 制表符
\v 垂直制表符
\ddd 以八进制数ddd规定的字符
\xdd 以十六进制数dd规定的字符
\udddd 以十六进制数dddd规定的unicode字符

在js中匹配字符串

String对象 使用正则表达式搜索字符串;

String对象的方法 意义
someStr.search(string or regexp) 返回第一个匹配字符串的下标,无则-1
someStr.match(string or regexp) 返回匹配到的字符串数组(匹配模式不是g只返回第一项),无则返回null
注意:在全局检索模式下,match() 既不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置,只有最外层匹配文本的数组。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。
someStr.replace(string or regexp, 'newStr'or functionReturnNewStr) 将匹配字符串替换为newStr,只替换最外层匹配 不针对子表达式匹配替换
someStr.split(string or regexp, length) 返回由匹配字符串分隔字符串后,形成的数组(不超过length长度)

正则表达式对象(RegExp)使用正则表达式搜索字符串

RegExp对象的方法 意义
regObj.test(originStr) originStr中是否存在匹配值,返回true或false
regObj.exec(originStr) originStr中是否存在匹配值,返回该匹配值数组(包含子表达式匹配信息)或null。g模式每次执行从匹配末位开始重新匹配,遍历到返回null则可以得到所有匹配值,非g则每次返回的都是第一个匹配值的数组
regObj.toString() 返回正则表达式的字面量字符串

tips:贪婪模式和非贪婪模式小例子

// 获取两个ab之间的字符串
var str = 'ababcdeaababaeab';
var greedyMode = /ab(?!ab)(.*)ab/g;
var noneGreedyMode = /ab(?!ab)(.*?)ab/g;

//console.log(greedyMode.exec(str));
var gm = '1';
var nongm = '1';
while(gm){  
  console.log('greedyMode');
  gm=greedyMode.exec(str);
  console.log(gm);
}
while(nongm){  
  console.log('noneGreedyMode');
  nongm = noneGreedyMode.exec(str);
  console.log(nongm);
}

相关文章

网友评论

      本文标题:JS的正则表达式使用

      本文链接:https://www.haomeiwen.com/subject/hlzviftx.html