正则表达式

RegExp(regular expression)

  • 正则表达式的作用: 字符串模式匹配

两种创建方式 :

1. 直接量
2. new RegExp();

修饰符

i – ignoreCase --> 执行对大小写不敏感的匹配
g – global --> 执行全局匹配(查找所有匹配而非找到第一个匹配后即停止)
m – multiline --> 执行多行匹配

var reg1 = /^a/gm;//^a表示以a开头的a,查找所有以a开头的字符
var str = "aab12";
console.log(str.match(reg1));// ['a']
var str1 = 'a\na'
console.log(str1.match(reg1));// ['a', 'a']

var reg2 = /[^a][^b][^c]/g;//第一位不是a,第二位不是b,第三位不是c
var str2 = 'abbsc2c2aec';
console.log(str2.match(reg2));// ['sc2', 'c2a']

元字符

\w === [0-9A-z_]
\W === [^\w]
\d === [0-9]
\D === [^\d]

var reg = /\w\d/;
var str = 'a9aa';
console.log(str.match(reg));// ['a9']

\s === [\t\n\r\v\f]
\S === [^\s]
\b === 单词边界
\B === [^\b]

var reg = /\bcde\b/;
var str = 'abc cde cdee h';
console.log(str.match(reg));// ['cde']

\u --> Unicode编码,能匹配汉字

量词

n+ --> 可以出现1, 次
n* --> 可以出现0, 次
n? --> 可以出现0,1次
n{X} --> 匹配X个
n{x,y} --> 匹配x到y个(由多到少的原则)

var str = 'abc';
var reg  = /\w+/;
console.log(str.match(reg));// ['abc']
var reg1 = /\w*/g;
console.log(str.match(reg1));// ['abc', '']
var reg2 = /\w?/g;
console.log(str.match(reg2));// ['a', 'b', 'c', '']
var reg3 = /\w{2}/g;
console.log(str.match(reg3));// ['ab']
var str1 = 'aaaaaaaed';
console.log(str1.match(reg4));// ['aaaaa', 'aaed']
var reg5 = /ed$/g;//以d结尾前面跟着e
console.log(str1.match(reg5));// ['ed']

\1 --> copy一个和第一个子表达式一模一样的,\2以此类推

var reg = /(\w)\1\1\1/g;
var str = 'aaaabbbb';
console.log(str.match(reg));// ['aaaa', 'bbbb']

var reg = /(\w)\1(\w)\2/g;
var str = 'aabb';
console.log(str.match(reg));// ['aabb']

RegExp对象方法

  • exec() --> 检索字符串中指定的值并返回其位置index
  • test()

支持正则表达式的String对象的方法

  • search() --> 返回正则表达式第一次匹配的位置index
var reg = /aabb/g;
var str = 'aecaabbaabb';
console.log(str.search(reg));// 3
var str1 = 'abc';
console.log(str1.search(reg));// -1
var reg = /a/g;
var str = 'aabb';
console.log(str.replace('a', 'b'));// babb //非正则表达式,没有全局匹配的功能
console.log(str.replace(reg, 'b'));// bbbb

var reg1 = /(\w)\1(\w)\2/;
console.log(str.replace(reg1, function($, $1, $2){
    return $2 + $2 + $1 +$1;
}))// bbaa //实现倒转

var reg = /(\w)\1+/g;
var str = 'aaaaaabbbbbbbc';
console.log(str.replace(reg, '$1'));// abc
  • split() --> 把字符串分割为字符串数组
str.toupperCase() --> 变大写
str.toLowerCase() --> 变小写
var reg = /-(\w)/g;
var str = 'the-first-name';
//将 the-first-name 替换为 theFirstName 
console.log(str.replace(reg, function($, $1){
    return $1.toupperCase();
}))

?= --> ?=后面为限制条件

//正向预查
var reg = /a(?=\d)/g;// 匹配a其后为数字的a
var str = 'aa0a';
console.log(str.match(reg));// a
//非正向预查
var reg = /a(?!\d)/g;// 匹配a其后不为数字的a
var str = 'aa0a';
console.log(str.match(reg));// ['a', 'a']
  • 一般情况下正则表达式都是贪婪匹配,遵循能多则不少的原则,用?可打破规则
var reg = /a{2,3}?/g;
var str = 'aaaaa';
console.log(str.match(reg));// ['aa', 'aa']

var reg1 = /a??/g;// 取0-1个,能取0个则不取1个
console.log(str.match(reg1));// ['', '', '', '', '', '']
//百度试题
var str = '100000000';
//将 100000000 改写为 100,000,000
var reg = /(\d)\d(\d)(?=\d)/g;
console.log(str.replace(reg, '$1$2$2,'));
console.log(str.match(/\d{1,3}/g).join(','));

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...