javascript 正则表达

/**
*==========================================
* 正则表达
* 格式 /表达式/g 或 new RegExp('表达式')
* ==========================================
* */

let str = "{ {a:1}, {b:2}}, {cc:334 44333} ,{ddd:444}}, {ee5e:55e5}}, {5ff-5:5ff-5}} ";

// \d 匹配一个数字,\d\d匹配两个数字,有多少个\d匹配多少个数字
console.log( "\\d\\d数字匹配-->>",str.match(/\d\d/g) )

// \w 匹配一个字母或数字  \w\w 匹配两个字母或数字,有多少个\w匹配多少个字母或数字
console.log( "\\w\\w匹配-->>",str.match(/\w\w/g)  )

// \d\w 匹配两个数字或一个数字一个字母
console.log( "\\d\\w匹配-->>",str.match(/\d\w/g)  )

// .可以匹配任意字符
console.log(".任意字符匹配-->>", str.match(/ee./g)  )

// *表示任意个字符
console.log("*任意个字符匹配-->>", str.match(/\w*/g)  )

// +表示至少一个字符
console.log("+至少一个字符匹配-->>", str.match(/\d+/g)  )
console.log("+至少一个e字符匹配-->>", str.match(/e+/g)  )

// \s匹配一个空格
console.log("\\s匹配一个空格-->>", str.match(/\s+/g)  )

/**
* ?匹配0个或1个字符
* {n}表示n个字符
* {n,m}表示n-m个字符:
* */

/**
* \d{3}\s+\d{3,8}
* 从左往右解读
* \d匹配一个数字,{3}配三个,所以\d{3}匹配3个数字,当然也可以写成\d\d\d
* \s匹配一个空格,+表示至少一个字符,\s+表示至少一个字符
* 后面{3,8}表示3-8个字符
* 即匹配 3个数字+至少1个空格+ 3-8个数字
* */
console.log( "\\d\{3\}\\d\{3,8\}匹配-->>", str.match(/\d{3}\s+\d{3,8}/g)  )

/**
* 如果匹配电话号码 xxx-xxxxxxxx 的格式,x表示任意数字
* 解读格式为
* 3个数字 [\d{3}]
* 1个短横杆 [-]
* 8个数字 [\d{8}]
* 组合为 :\d{3}-\d{8}
* 表达式 :/\d{3}-\d{8}/g
*
* 如果是匹配11位电话号码
* 直接 \d{11}
* */
let phone1 = "{phone:123-12345678 }"
let phone2 = "{phone:123-1234567 }"
console.log( "匹配电话号码-->>",phone1.match( /\d{3}-\d{8}/g ) ); // 输出123-12345678
console.log( "匹配电话号码-->>",phone2.match( /\d{3}-\d{8}/g ) ); // 输出null

/**
* ===========================================
* 进阶
* ===========================================
* */

/**
* []表示范围
* [0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线
* [0-9a-zA-Z\_]+可以匹配至少一个数字、字母或者下划线
* */
console.log( "[0-9a-zA-Z\_]匹配一个数字、字母或者下划线-->>",str.match( /[0-9a-zA-Z\_][0-9a-zA-Z\_]/g ) )

/**
* [a-zA-Z\_\$][0-9a-zA-Z\_\$]*
* [a-zA-Z\_\$] 匹配一个字母、下滑线或$符号
* [0-9a-zA-Z\_\$]* 匹配任意一个字母、下滑线或$符号
* [a-zA-Z\_\$][0-9a-zA-Z\_\$]*  匹配 一个字母、下滑线或$符号+任意一个字母、下滑线或$符号
* */
console.log( "[a-zA-Z\_\$][0-9a-zA-Z\_\$]*匹配一个字母、下滑线或$符号+任意一个字母、下滑线或$符号-->>",str.match( /[a-zA-Z\_\$][0-9a-zA-Z\_\$]*/g ) )

/**
* 同样也可以是用{n},{n,m}、+、*、? 等修饰符
* 如:
*  [a-zA-Z\_\$]{n}
*  [a-zA-Z\_\$]{n,m}
*  [a-zA-Z\_\$]+
*  [a-zA-Z\_\$]*
*  [a-zA-Z\_\$]? 等
* */
console.log( str.match(/[a-zA-Z\_\$]{3}/g ) )
console.log( str.match(/[a-zA-Z\_\$]{3,8}/g ) )
console.log( str.match(/[a-zA-Z\_\$]{3}\w+/g ) )
console.log( str.match(/[a-zA-Z\_\$]{3}\w*/g ) )
console.log( str.match(/[a-zA-Z\_\$]{3}\w?/g ) )

/**
* ^表示行的开头,^\d表示必须以数字开头。
* $表示行的结束,\d$表示必须以数字结束。
* 用()表示的就是要提取的分组(Group)
* 果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串来。
* */
let str2 = "5ff-5:5ff-5"
console.log( "^与$匹配", str2.match (/^(\d)[0-9a-zA-Z\-\:]*(\d)$/g ) )

var re = /^(\d{3})-(\d{3,8})$/g;
console.log( ('010-12345').match(re) ); // ['010-12345', '010', '12345']

var emailStr = "aaaaaaaaaaa@qq.com";
console.log ( emailStr.match(/\w+@qq.com$/g ) ) ;

原创文章,作者:ourygey,如若转载,请注明出处:http://ourygey.com/2021/10/09/javascript-%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be/

发表评论

您的电子邮箱地址不会被公开。