2-7 JS正则贪婪模式与非贪婪模式
2017-03-19
如果在数量词 *、+、? 或 {}, 任意一个后面紧跟该符号(?),会使数量词变为非贪婪( non-greedy) ,即匹配次数最小化。反之,默认情况下,是贪婪的(greedy),即匹配次数最大化。
`123456789`.replace(/\d{3,7}/=);
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/match
当一个字符串与一个正则表达式匹配时, match()方法检索匹配项。
str.match(regexp);
`123456789`.replace(/\d{3,7}/,`xyz`);
"xyz89"
`123456789`.replace(/\d{3,7}?/,`xyz`);
"xyz456789"

0
采集 0
2-8 分组
2017-03-19
分组(Grouping)与反向引用(back references)
字符 含义
(x)
匹配 x 并且捕获匹配项。 这被称为捕获括号(capturing parentheses)。
例如,/(foo)/ 匹配且捕获 "foo bar." 中的 "foo"。被匹配的子字符串可以在结果数组的元素 [1], ..., [n] 中找到,或在被定义的 RegExp 对象的属性 $1, ..., $9 中找到。
捕获组(Capturing groups)有性能惩罚。如果不需再次访问被匹配的子字符串,最好使用非捕获括号(non-capturing parentheses),见下面。
\n
n 是一个正整数。一个反向引用(back reference),指向正则表达式中第 n 个括号(从左开始数)中匹配的子字符串。
例如,/apple(,)\sorange\1/ 匹配 "apple, orange, cherry, peach." 中的 "apple,orange,"。一个更全面的例子在该表格下面。
(?:x) 匹配 x 不会捕获匹配项。这被称为非捕获括号(non-capturing parentheses)。匹配项不能够从结果数组的元素 [1], ..., [n] 或已被定义的 RegExp 对象的属性 $1, ..., $9 再次访问到。

0
采集 0
2-7 JS正则贪婪模式与非贪婪模式
2017-03-19
如果在数量词 *、+、? 或 {}, 任意一个后面紧跟该符号(?),会使数量词变为非贪婪( non-greedy) ,即匹配次数最小化。
反之,默认情况下,是贪婪的(greedy),即匹配次数最大化。
`123456789`.match(/\d{3,4}/);
["1234"]
`123456789`.match(/\d{3,4}/g);
["1234", "5678"]
`123456789`.match(/\d{3,4}?/);
["123"]
`123456789`.match(/\d{3,4}?/g);
["123", "456", "789"]
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/match
当一个字符串与一个正则表达式匹配时, match()方法检索匹配项。
str.match(regexp);

0
采集 0
2-9 前瞻
2017-03-19
在使用于向前断言(lookahead assertions)时,见该表格中 (?=)、(?!) 和 (?:) 的说明
x?
匹配前面的模式 x 0 或 1 次。
例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。
如果在数量词 *、+、? 或 {}, 任意一个后面紧跟该符号(?),会使数量词变为非贪婪( non-greedy) ,即匹配次数最小化。反之,默认情况下,是贪婪的(greedy),即匹配次数最大化。
在使用于向前断言(lookahead assertions)时,见该表格中 (?=)、(?!) 和 (?:) 的说明。
x(?=y) 只有当 x 后面紧跟着 y 时,才匹配 x。 例如,/Jack(?=Sprat)/ 只有在 'Jack' 后面紧跟着 'Sprat' 时,才会匹配它。/Jack(?=Sprat|Frost)/ 只有在 'Jack' 后面紧跟着 'Sprat' 或 'Frost' 时,才会匹配它。然而,'Sprat' 或 'Frost' 都不是匹配结果的一部分。
x(?!y)
只有当 x 后面不是紧跟着 y 时,才匹配 x。例如,/\d+(?!\.)/ 只有当一个数字后面没有紧跟着一个小数点时,才会匹配该数字。
/\d+(?!\.)/.exec("3.141") 匹配 141 而不是 3.141。
(?:x) 匹配 x 不会捕获匹配项。这被称为非捕获括号(non-capturing parentheses)。匹配项不能够从结果数组的元素 [1], ..., [n] 或已被定义的 RegExp 对象的属性 $1, ..., $9 再次访问到。

0
采集 0
2-5 JS预定义类及边界
2017-03-19
字符类别(Character Classes)
. === [^\r\n]
. (点号,小数点) 匹配任意单个字符,但是回车\r换行\n符除外:\n \r \u2028 或 \u2029。
在字符集中,点( . )失去其特殊含义,并匹配一个字面点( . )。
需要注意的是,m 多行(multiline)标志不会改变点号的表现。因此为了匹配多行中的字符集,可使用[^] (当然你不是打算用在旧版本 IE 中),它将会匹配任意字符,包括换行符。
例如,/.y/ 匹配 "yes make my day" 中的 "my" 和 "ay",但是不匹配 "yes"。
\d
匹配基本拉丁字母表(basic Latin alphabet)中的一个数字字符。等价于[0-9]。
例如,/\d/ 或 /[0-9]/ 匹配 "B2 is the suite number." 中的 '2'。
\D
匹配任意一个不是基本拉丁字母表中数字的字符。等价于[^0-9]。
例如,/\D/ 或 /[^0-9]/ 匹配 "B2 is the suite number." 中的 'B'。
\w
匹配任意来自基本拉丁字母表中的字母数字字符,还包括下划线。等价于 [A-Za-z0-9_]。
例如,/\w/ 匹配 "apple" 中的 'a',"$5.28" 中的 '5' 和 "3D" 中的 '3'。
\W
匹配任意不是基本拉丁字母表中单词(字母数字下划线)字符的字符。等价于 [^A-Za-z0-9_]。
例如,/\W/ 或 /[^A-Za-z0-9_]/ 匹配 "50%" 中的 '%'。
\s
匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。
例如 /\s\w*/ 匹配 "foo bar" 中的 ' bar'。
\S
匹配一个非空白符。
例如,/\S\w*/ 匹配 "foo bar" 中的 'foo'。

1
采集 0
举报
0/150
提交
取消