【JS】【专题】正则表达式

var reg=/ 正则表达式 /修饰符
var str=...
var i=str.search(reg)

修饰符

  1. i:忽略大小写
  2. g:全局搜索匹配,即不仅仅返回第一个匹配的,而是返回全部
  3. m:多行匹配

正则表达式

一、元字符

  •  .:除换行符外所有的字符
  • [ ]:[ ]表示范围;匹配一个字符
  • [^ ] :  表示和这个范围相反的。也是一个字符
  • reg* :reg出现次数:reg>=0。匹配所有的字符:.*
  • reg+:reg出现次数:reg>=1
  • reg?:reg出现次数:reg = 0 | 1
  • reg{m,n}:次数

n为空:reg>=m次

n>m:reg的次数最少为m,最多为n

reg{m}:reg的次数=m

  • () : 分组
  • reg1 | reg2: reg1或reg2
  • \ :特殊字符转义
  • ^ : 字符串的开头
  • $ : 字符串的结尾

二、简写字符

  • \w :匹配所有字母数字,等同于 [a-zA-Z0-9_]
    \W :匹配所有非字母数字,即符号,等同于: [^\w]
  • \d : 匹配数字: [0-9]
    \D :匹配非数字: [^\d]
  • \s :匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]
    \S :匹配所有非空格字符: [^\s]
  • \n :匹配一个换行
  • \r :匹配一个回车
  • \p :匹配 \r\n,用来匹配 DOS 行终止符
  • \f :匹配一个换页
  • \t :匹配一个制表

三、零度断言

  • reg(?=pattern):匹配reg,且reg后面紧跟着pattern
  • (?<=pattern)reg:匹配reg,且reg前面紧跟着pattern
  • reg(?!pattern):匹配reg,且reg后面不能紧跟着pattern
  • (?
  • ...(?:pattern)...:表示被这个括号筛除返回的结果从$(1,2,3...)拿出(同时也不是p(1,2,3...))

四、贪婪匹配和惰性匹配

默认采用贪婪匹配模式

贪婪:匹配尽可能多的字符

惰性:匹配到即返回

贪婪转惰性:在次数的reg后面加个? 

var str='2426374678234573'
var obj=/\d{3,6}/      //贪婪
var obj1=/\d{3,6}?/    //惰性
var s=str.match(obj)   //242637
var s1=str.match(obj1)  //242
*? >=0次,返回最小
+? >=1,返回最小
?? 0 | 1,返回最小
{m,n}? m次到n次,返回最小

replace(reg, fun/$参数)

变量名 代表的值
$& 插入匹配的子串。
$` 插入当前匹配的子串左边的内容。
$' 插入当前匹配的子串右边的内容。
$n

假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。提示:索引是从1开始

变量名 代表的值
match 匹配的子串。(对应于上述的$&。)
p1,p2, ...

假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+p2 就是匹配的 \b+

offset

匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)

string 被匹配的原字符串。
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1"); //即p2,p1
// Smith, John
console.log(newstr);

 

var reg = /(apples)/gi;
var str = "Apples are round, and apples are juicy.";
var newstr = str.replace(reg,function(match,p1){
  console.log('-------------')
  console.log('match: '+match)
  console.log('p1: '+p1)
});

【JS】【专题】正则表达式_第1张图片

如果把reg的括号去掉的话:(p1的概念就不存在了)

【JS】【专题】正则表达式_第2张图片

但是我发现,replace这个回调函数是,每个匹配的子串都要重新执行,且每次的match=一个新的匹配的子串。

p1代表了一个() ,所以由于这个例子的特殊性,所以每次回调函数和match相等


  • search():返回reg在原str中的位置;var n = str.search(reg)
  • test():str中是否有匹配reg的字符;var bool=reg.test(str)

一些特殊的例子:

  • 将字符串中的双引号换成单引号
name = '"a", "b"';

var x=name.replace(/"([^"]*)"/g, function(match,p1){ //回调了两次
  console.log('match: '+match)
  console.log('p1: '+p1)
  return "'"+p1+"'"
})
console.log(x)

【JS】【专题】正则表达式_第3张图片

  • 表单匹配
/*校验是否中文名称组成 */
function ischina(str) {
    var reg=/^[\u4E00-\u9FA5]{2,4}$/;   /*定义验证表达式*/
    return reg.test(str);     /*进行验证*/
}
/*校验邮件地址是否合法 */
function IsEmail(str) {
    var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
    return reg.test(str);
}

 

你可能感兴趣的:(【JS】【专题】正则表达式)