正则表达式的学习笔记
正则体验
在字符串中找到数据的数字
//把下面字符串当中所有数字找到
var str = 'adsfas12dfasdfcvxsfd232hggdgfsfdgsdg3453sdgsfdgfdsgsfdf454gsdfggs';
// 方法一,循环遍历字符串获取匹配的数字
function getNum(str) {
var arr = [];
var tem = "";
for(var i=0,len=str.length;i<len;i++){
var ch = str.charAt(i); // charAt() 返回字符串中的n个字符
if(ch >= 0){
tem += ch;
}else {
if(tem){
arr.push(tem);
tem= "";
}
}
}
return arr;
}
var num = getNum(str)
console.log(num.join('-')); // 12-232-3453-454
// 方法二,正则表达式
var reg = /\d+/g; // //: 正则的实例化方式; \d:数字,+:一个或者多个; g: 全局匹配
// match(regexp)方法; 将检索字符串string,以找到一个或多个与regexp匹配的文本,返回一个数组
// 这个方法的行为很大程度上依赖于regexp是否具有性质g。
console.log(str.match(reg).join('-')); // 12-232-3453-454
使用正则一行代码搞定。
正则语法
// 实例化
var reg = //;
var reg = new RegExp();
// =================================
// \d 表示匹配数字
// + 表示至少匹配一个
// g 表示全局匹配
// i 表示不区别大小写,正则默认是区分大小写
var str = 'aa11bb22cc33dd44';
console.log(str.match(/\d/)); // ["1", index: 2, input: "aa11bb22cc33dd44", groups: undefined]
console.log(str.match(/\d+/)); // ["11", index: 2, input: "aa11bb22cc33dd44", groups: undefined]
console.log(str.match(/\d+/g)); // ["11", "22", "33", "44"]
var str2 = "javascript Java";
console.log(str2.match(/java/)); // ["java", index: 0, input: "javascript Java", groups: undefined]
console.log(str2.match(/java/g)); // ["java"]
console.log(str2.match(/java/gi)); // ["java", "Java"]
//通过RegExp new出来的正则实例对象 ,传入的参数中的 \ 需要转义 \\
var reg3 = /\d+/g; // reg3 等价于 reg 4 常用方式
var reg4 = new RegExp('\\d+','g'); // reg3 等价于 reg4
var str3 = "qq234df34er";
console.log(str3.match(reg3)); //["234", "34"]
console.log(str3.match(reg4)); // ["234", "34"]
正则相关的api
/*
正则相关的API
test 用来验证字符串是否符合特定的规则,匹配返回true;否则返回false;
exec() //用于检索字符串中的正则表达式的匹配
参数:要检索的字符串
返回值:一个数组,存放的是匹配的结果。如果没有找到匹配,值为null。
数组的格式:第0个元素就是与表达式相匹配的文本
第1个元素是与regexp的第一个子表达式相匹配的文本(如果存在)。
第2个元素是与regexp的第二个子表达式相匹配的文本,以此类推。
数组的length属性声明的是数组中的元素个数。
index属性声明的是匹配文本的第一个字符的位置
input属性指的就是string
非全局模式调用RegExp对象的exec()方法时,返回的数组与调用方法String.match()返回的方法相同
*/
/*
字符串相关的API
1、search()返回第一个与正则相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回-1。
2、split()把字符串分割为字符串数组。
3、match()找到一个或多个正则表达式的匹配。
4、replace()替换与正则表达式匹配的子串。
*/
var str = "hello 123";
var str1 = "hello hi";
var reg = /\d+/g; // +号也可以写成 {2,8} 表示 2 到8位
console.log(reg.test(str)); // true
console.log(reg.test(str1));// false
// 字符串相关的API ======================
// search() 的用法
var reg2 = /javascript/;
var reg3 = /Javascript/; // 默认区分大小写
var reg4 = /javascript/i; // i 不区分大小写
var reg5 = /javascript222/;
var str2 = "hello javascript,this is Javascript!";
console.log(str2.search(reg2)); // 6
console.log(str2.search(reg3)); // 25
console.log(str2.search(reg4)); // 6
console.log(str2.search(reg5)); // -1
// --------------------------------------------------------------------------------------
// split() 的用法
var str3 = 'zhangsan;lisi;wangwu';
var str4 = 'zhangsan123lisi4256wangwu1zhaoliu';
var arr = str3.split(';');
console.log(arr); // ["zhangsan", "lisi", "wangwu"]
var reg6 = /\d+/g
var arr2 = str4.split(reg6); // 用数字来做为分割的条件
console.log(arr2); // ["zhangsan", "lisi", "wangwu", "zhaoliu"]
//--------------------------------------------------------------
// match()方法的使用
var str5 = 'good good study day day up';
var reg = /good/;
var arr3 = str5.match(reg);
//非全局匹配
//第一项表示匹配到的数据;index表示匹配到的数据的索引;input表示整个字符串
console.log(arr3);//["good", index: 0, input: "good good study day day up"]
//全局匹配
var reg7 = /good/g;
console.log(str5.match(reg7));//["good", "good"]
//-----------------------------------------------------
//replace() 的用法,替换字符串
var str6="Visit Microsoft! Tom Tom"
var reg8 = /Microsoft/;
var reg9 = /Tom/g;
//把符合第一个参数规则的字符串替换成第二个参数
console.log(str6.replace(reg8, "W3School")); // Visit W3School! Tom Tom
console.log(str6.replace(reg9, "Jerry")); // Visit Microsoft! Jerry Jerry
// 不用正则它只替换第一个,后面就不管了
console.log(str6.replace('Tom', "Jerry")); //Visit Microsoft! Jerry Tom
//-----------------------------------------------------
var name = "Doe, John";
//\w表示任意的单词字符;
//+表示一个或者多个
//\s表示空格
//*零个或者多个
//小括号什么意思?分组(子表达式)
var reg = /(\w+)\s*, \s*(\w+)/; //$1 $2 .....
console.log(name.replace(reg, "$2 $1"));// John Doe 交换两个子表达式所匹配的内容
转义字符
/*
转义字符:
\d 任何一个数字字符,等价于[0-9]
\D 任何一个非数字字符,等价于[^0-9]
\w 任何一个字母数字或下划线字符,等价于[0-9a-zA-Z_]
\W 任何一个非字母数字和下划线字符,等价于[^0-9a-zA-Z_]
\s 任何一个空白字符,包括换页符、换行符、回车符、制表符和垂直制表符,等价于[\f\n\r\t\v]
\S 任何一个非空白字符,等价于[^\f\n\r\t\v]
^表示以什么开始
$表示以什么结束
*/
//量词 + * ? {m,n}
//+匹配一次或者多次
//*匹配零次或者多次
//?匹配零次或者1次
//用来控制匹配的数量
var reg = /[0-9]{2}/; // 表示0到9中的最少有一个
var reg2 = /\d/;
var str = '11';
// console.log(reg.test(str)); // true
// console.log(reg2.test(str)); // true
// --------------
console.log(/[0-9]/.test(str)); // true 表示0到9中的任意一个数字
console.log(/[0-9]+/.test(str)); // true 表示0到9中的至少有一个数字
console.log(/[0-9]{1}/.test(str)); // true 表示0到9中的至少有一个数字
console.log(/[0-9]{3}/.test(str)); // false 表示0到9中的至少有3个数字
console.log(/[0-9]+/.test(str)); // true