JavaScript正则表达式

JavaScript正则表达式

创建正则表达式

使用构造函数

	var 变量 = new RegExp("正则表达式"); // 注意,参数是字符串
	var 变量 = new RegExp("正则表达式", "匹配模式"); // 注意,两个参数都是字符串

RegExp的意思是 Regular expression。使用typeof检查正则对象,会返回object。

上面的语法中,既可以传一个参数,也可以传两个参数。

创建了正则表达式的对象后,该怎么使用呢?大致分为两个步骤:

  • (1)创建正则表达式的对象 reg。
  • (2)使用 reg 的test() 方法,判断指定字符串是否符合规则。

正则表达式的test()方法:【重要】

	myReg.test(str); // 判断字符串 str 是否符合 指定的 myReg 这个正则表达式的规则

解释:使用test()这个方法可以用来检查一个字符串是否符合正则表达式的规则,如果符合则返回true,否则返回false

构造函数 RegExp 中,也可以传两个参数。我们可以传递一个匹配模式作为第二个参数。这个参数可以是:

  • i 忽略大小写。这里的 i 指的是 ignore。
  • g 全局匹配模式。这里的 g 指的是 global。
var pattern = new RegExp("h", 'i')// 定义一个正则表达式:检查一个字符串中是否含有 h
var str1 = "Hello"
var str2 = "world"
// 通过 test()方法,判断字符串是否符合 上面定义的 reg 规则
console.log(pattern.test(str1)) // true
console.log(pattern.test(str2))  // false

使用字面量

	var 变量 = /正则表达式/;  // 注意,这个语法里没有引号
	var 变量 = /正则表达式/匹配模式;  // 注意,这个语法里没有引号
var pattern = /h/i;
var str1 = "Hello"
var str2 = "world"

console.log(pattern.test(str1)) // true
console.log(pattern.test(str2))  // false

总结

以上两种方式都是可以使用的,但是有一下区别

  • 使用构造函数创建时,更加灵活,因为参数中还可以传递变量。
  • 方式二:使用字面量的方式创建,更加简单。

注意

全局匹配 g 慎用test()方法,对于非全局匹配的正则表达式,test()只会检测是否存在某个目标字符串(只要存在就为 true),多次检测的结果都相同

当设置全局标志 /g 时,一旦字符串中还存在匹配,test() 方法都将返回 true,同时匹配成功后将把 lastIndex 属性的值设置为上次匹配成功结果之后的第一个字符所在的位置,下次匹配将从 lastIndex 指示的位置开始;匹配不成功时返回 false,同时将 lastIndex 属性的值重置为 0。

const reg = /test/g;
const str = '_test_test';

console.log(reg.test(str)); // true
console.log(reg.lastIndex); // 5

console.log(reg.test(str)); // true
console.log(reg.lastIndex); // 10

console.log(reg.test(str)); // false
console.log(reg.lastIndex); // 0

正则表达式的使用

规则

下面是正则中常用的一些规则

[]表示:或

  • /[ab]/ 等价于 /a|b/:检查一个字符串中是否包含 a或b

  • /[a-z]/:检查一个字符串那种是否包含任意小写字母

  • /[A-Z]/:任意大写字母

  • /[A-z]/:任意字母

  • /[0-9]/:任意数字

  • /a[bde]c/:检查一个字符串中是否包含 abc 或 adc 或 aec

字符中中的正则

之前我们讲过,在字符串的一些方法中参数是支持正则的

String对象的如下方法,是支持正则表达式的:

方法描述备注
split()将字符串拆分成数组
search()搜索字符串中是否含有指定内容,返回索引 index
match()根据正则表达式,从一个字符串中将符合条件的内容提取出来
replace()将字符串中的指定内容,替换为新的内容并返回
split

split():将一个字符串拆分成一个数组。可以接受一个正则表达式作为参数。

var str = "1a2b3c4d5e6f7g";

var result = str.split(/[A-z]/); // 
console.log(result);
// [
//     '1', '2', '3',
//     '4', '5', '6',
//     '7', ''
//   ]
search

search():搜索字符串中是否含有指定内容。如果搜索到指定内容,则会返回第一次出现的索引;否则返回-1。

search()方法可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串。serach()只会查找第一个,即使设置全局匹配也没用。

	var str = "hello abc hello aec afc";
	/*
	* 搜索字符串中是否含有abc 或 aec 或 afc
	*/
	result = str.search(/a[bef]c/);
	console.log(result); // 打印结果:6
match

match():根据正则表达式,从一个字符串中将符合条件的内容提取出来,封装到一个数组中返回(即使只查询到一个结果)。

注意:默认情况下,match()方法只会找到第一个符合要求的内容,找到以后就停止检索。我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容,并以数组的形式返回。

另外,我们可以为一个正则表达式设置多个匹配模式,且匹配模式的顺序无所谓。

代码举例

	var str = "1a2a3a4a5e6f7A8B9C";

	var result1 = str.match(/[a-z]/);   // 找到符合要求的第一个内容,然后返回
	var result2 = str.match(/[a-z]/g);  // 设置为“全局匹配”模式,匹配字符串中 所有的小写字母
	var result3 = str.match(/[a-z]/gi); // 设置多个匹配模式,匹配字符串中 所有的字母(忽略大小写)

	console.log(result1); // 打印结果:["a"]
	console.log(result2); // 打印结果:["a", "a", "a", "a", "e", "f"]
	console.log(result3); // 打印结果:["a", "a", "a", "a", "e", "f", "A", "B", "C"]
replace

replace():将字符串中的指定内容,替换为新的内容并返回。不会修改原字符串。

	新的字符串 = str.replace(被替换的内容,新的内容);

参数解释:

  • 被替换的内容:可以接受一个正则表达式作为参数。
  • 新的内容:默认只会替换第一个。如果需要替换全部符合条件的内容,可以设置正则表达式为全局匹配模式。
	var phoneStr = "13067890123";

	var phoneReg = /^1[3-9][0-9]{9}$/;

	console.log(phoneReg.test(phoneStr));
  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值