var str ='1 a h87 4-12-mm102/34'var str1 =[]var str2 =[]for(var i =0; i < str.length; i++){var num =Number(str[i]);
str1.push(num)}for(var j =0; j < str1.length; j++){if(str1[j]!==NaN&& str1[j]>0&& str1[j+1]!==NaN&& str1[j+1]>0){
str2.push(Number(str[j])*10+Number(str[j+1]))}}
console.log(str2);
2.3.2 正则表达式方式
var str ='1 a h87 4-12-mm102/34'var reg =/\d+/givar str1 = str.match(reg)// console.log(str1)for(var i =0; i < str1.length; i++){if(str1[i]>9&& str1[i]<100){
console.log(str1[i]);}}
2.4 正则表达式的概述
正则表达式是一个描述字符模式的对象
定义正则表达式
表达式的模式
2.5 正则表达式的对象
2.5.1 创建语法
普通方式
var reg =/表达式/附加参数
var reg =/white/var reg =/white/g
构造函数方式
var reg =newRegExp("表达式","附加参数")var reg =newRegExp("white")var reg =newRegExp("white","g")
2.5.2 表达式模式
简单模式
var reg =/china/var reg =/abc8/
复合模式
var reg =/^\w+$/var email ='409757371@qq.com''pxcai@163.com.cn'var reg =/^\w+@\w+.[a-zA-Z]{2,3}(.[a-zA-Z]{2,3})?$/
2.5.3 常用属性
RegExp 对象的属性
属性
描述
global
RegExp 对象是否具有标志 g,全局
ignoreCase
RegExp 对象是否具有标志 i ,是否区分大小写
2.5.4 常用方法
RegExp 对象的方法
方法
描述
exec
检索字符中是正则表达式的区配,返回找到的值,并确定其位置
test
检索字符串中指定的值,返回 true 或 false
test 方法
var str ='hello js,css,html,nodejs'var reg =/js/g// truevar reg =/JS/g// falsevar reg =/JS/gi// true(不区分大小写)alert(reg.test(str))// test方法用于判断字符串中是否存在正则表达式规定的模式=======================================================================
exec 方法
var str ='hello js,css,html,nodejs'var reg =/js/g// g表示全局匹配, i表示忽略大小写// alert(reg.test(str)) // test 方法用于判断字符串中是否存在正则表达式规定的模式var result =null// exec 方法用于匹配字符串,并通过相关属性获取匹配的信息while(result = reg.exec(str)){
console.log(result[0]);// 匹配字符
console.log(result.index);// 匹配的位置}
var str ="我的qq号码:123456myPhone13888888888,"var reg =/1\w+/gi// 贪婪法则是按匹配最大范围来执行的var reg =/1\w+?/gi// 贪婪法则是按匹配最大范围来执行的,?用在其他量词后面表示禁用贪婪法则
console.log(str.match(reg));
正则替换两端空格练习
var str =' I love Regexp! 'var reg1 =/^\s*/// 开头空格var reg2 =/\s*$/// 结尾空格
console.log(str.replace(reg1,'').replace(reg2,''))
3.3 其他匹配法则
字符匹配符
[a-z][A-Z][0-9][1234][abcd]
[^] (取反)
转义符
\
选择匹配符
|
注意事项
中文的匹配
[\u4e00-\u9fa5]
转义字符在Regexp对象的创建时要多转义一次
var str ='pxcai@163.com'var reg =/\./gi// \.表示普通的小数点符号,不是正则表达式的匹配符alert(reg.test(str))var str =' I love Regexp! 'var reg =/^\s*|\s*$/g// | 表示多个匹配条件都可以使用
console.log(str.replace(reg,''))var content ='我abc'var reg1 =/[\u4e00-\u9fa5]/g// 中文匹配alert(reg1.test(content))var reg1 =newRegExp('\\.','gi')// 多转义一次alert(reg1.test(str))
3.4 子表达式和反向引用
子表达式
在正则匹配模式中,使用一对括号包起来的内容
反向引用
子表达式匹配的内容会被系统捕获到缓冲区,可以使用”\数字”的方式来引用缓冲区内容
var str ='abc12hhh876aas888kkk111---==='var reg =/(\d)\1\1/g// 找出三位相同的数字,\1表示前面的子表达式的内容alert(str.match(reg))
3.5 特殊应用
正向预查(?=)
获取在指定条件前匹配成功的字符串
反向预查(?!)
获取在指定条件后匹配成功的字符串
var str ='我的HTML成绩是95分,CSS成绩是90分,JS成绩是80分,一课不如一课,唉'var reg =/\d{2}(?=分,CSS)/gi// 前向预查,提供筛选条件,获取在条件前面匹配成功字符串var reg1 =/\d{2}(?!分,CSS)/gi// 后向预查,提供筛选条件,获取在条件后面匹配成功字符串alert(str.match(reg))alert(str.match(reg1))
3.6 正则表达式练习
获取 HTML 标签的个数
var str ='我们在学习<div>I study JavaScript </div><p>今天你学习了嘛</p>'// var reg = /<[a-zA-Z]+>/gi // 1.设置 html 开始标签的匹配模式var reg =/<([a-zA-Z]+)>(.+)<\/\1>/gi// 2.匹配完整的一个 html 标签和内容// console.log(str.match(reg))var arr = str.match(reg)// arr[0] = '<div>I study JavaScript </div>'var regDelTag =/<.+?>/gi// 3.匹配任意的 html 标签,不包含内容alert(arr[0].replace(regDelTag,''))