Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

正则表达式基础 #5

Open
wxqweb opened this issue Nov 30, 2018 · 0 comments
Open

正则表达式基础 #5

wxqweb opened this issue Nov 30, 2018 · 0 comments

Comments

@wxqweb
Copy link
Owner

wxqweb commented Nov 30, 2018

先上文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions;

正则历史:维基百科;

接下来由很浅入浅来分类学习正则基础:

元字符

常用元字符 含义
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\W 匹配不是字母、数字、下划线的字符
\d 匹配数字,相当于[0-9]
\D 匹配不是数字的字符
\s 匹配任意不可见的字符,包括空格、制表符、换行符等
\S 匹配任意可见字符
^ 匹配字符串开始位置
$ 匹配字符串结束位置
\ 转义字符. 在非特殊字符之前的反斜杠表示下一个字符是特殊的,不能从字面上解释。相反,反斜杠也可以将其后的特殊字符,转义为字面量。

量词

常用量词 含义
* 重复任意次, 相当于{0,}
? 重复0次或者1次, 相当于{0, 1}
+ 重复1次或者更多次,相当于{1,}
{n} 重复n次
{n,} 重复n次或者大于n次
{n, m} 重复n到m次

分支&字符集

常用字符 含义
x y
[abc] 一个字符集合, 匹配方括号的中任意字符. [abc] == [a-c]
[^abc] 一个反向字符集, 匹配任何没有包含在方括号中的字符. [^abc] == [^a-c]

零宽断言 (lookaround assertions)

  • 也翻译成环视
  • 根据方向的不同,分为lookahead和lookbehind
  • 根据判断原则,分为肯定和否定。
正向/预测现行/顺序
从左到右/pattern的前面位置
负向/回顾后发/逆序
从右到左/pattern的后面位置
肯定/正 (?=pattern) (?<=pattern)
否定/负 (?!pattern) (?<!pattern)

惰性&贪婪

  • 贪婪模式——在匹配成功的前提下,尽可能多的去匹配
  • 惰性模式——在匹配成功的前提下,尽可能少的去匹配
  • /.*bbb/g.test('abbbaabbbaaabbb1234')
  • /.*?bbb/g.test('abbbaabbbaaabbb1234')
  • 贪婪模式⽤用于匹配优先量量词修饰的⼦子表达式
  • 惰性模式⽤用于匹配忽略略优先量量词修饰⼦子表达式

修饰符&标志

标志 描述
g → global 全局搜索
i → ignoreCase 不区分大小写搜索
m → multiline 多行搜索
y → sticky 执行“粘性”搜索,匹配从目标字符串的当前位置开始
u → unicode 表示按unicode(utf-8)匹配(主要针对汉字)
s → dotAll 将字符串视为单行来匹配

使用方法

方法 描述
exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。

例:

var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");

var myRe = /d(b+)d/g;
var myArray = myRe.test("cdbbdbsbz");

var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);  // ["fee ", "fi ", "fo "]
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);   //  "Smith, John"
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
var pattern = /\s*;\s*/;
var nameList = names.split(pattern);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant