这边文章用来记录一些之前曾了结、用到的正则表达式。参考(MDN)
若干字符含义
标志 | 含义 | 用例 |
---|---|---|
g |
全局搜索 | 'wwabcabHabcwacb'.match(/abc/g) => ['abc', 'abc'] |
i |
忽略大小写 | |
m |
多行, 让开始和结束字符(^ 和$ )工作在多行模式工作, 而不是整个字符串的开始和结尾处 |
元字符 | 含义 |
---|---|
. |
匹配换行符之外的任意字符 |
w |
匹配字母、数字或下划线 |
s |
匹配任意的空白符 |
\s |
匹配一个空白字符,包括空格、制表符、换页符和换行符 |
\S |
匹配一个除了空白字符之外的任意字符(非空白字符) |
反义元字符 | 含义 |
---|---|
W |
匹配字母、数字或下划线 |
S |
匹配任意的空白符 |
限定符 | 含义 |
---|---|
* |
重复零次或多次 |
+ |
重复一次或多次 |
? |
重复零次或一次 |
表达式中的小括号 ()
(parentheses, or round bracket)
()
是为了提取匹配的字符串。表达式中有几个()
就有几个相应的匹配字符串, 可以配合字符串 replace
方法使用以提取字串。
表达式中的中括号 []
[]
是定义匹配的字符范围。比如 [a-zA-Z0-9]
表示相应位置的字符要匹配英文字符和数字。[\S*]
表示任意非空字符
匹配任意字符,包括换行符
.
无法匹配换行符,所以为了匹配所有字符,js里通常采用 /[\s\S]/g
. reference
'ab\nc'.match(/./g) // ["a", "b", "c"]
'ab\nc'.match(/[\s\S]/g) // ["a", "b", "↵", "c"]
+?
的含义, 贪婪/非贪婪匹配
+
是限定符, 放在字符或表达式后面, 代表重复前面的字符或表达式至少一次;
跟在限定符后面的 ?
表示本限定符使用非贪婪匹配(默认是贪婪的);
贪婪与限定符有关,贪婪匹配要求尽可能长,非贪婪匹配要求尽可能短
例如: 'abbbbbbc'.match(/[b]+?/g)
匹配结果是 ["b", "b", "b", "b", "b", "b"]
, 而 'abbbbbbc'.match(/[b]+/g)
匹配结果是 ["bbbbbb"]
Example
-
匹配指定字符头尾之间的字符串
目标: 在字符串中提取提取以
<
开头、以>
结束的部分例子:
abc<script>def
RegExp:
/<.*>/g
匹配结果:
<script>
-
匹配模版变量
目标:在模版中提取
<%=
%>
之间的内容例子:
Hello, <%= username %>
RegExp:
/<%=([\s\S]+?)%>/g
匹配结果:
<%= username %>
配合字符串
replace
方法使用:'Hello, <%= username %>'.replace(/<%=([\s\S]+?)%>/g, function (match, code) { console.log(match, code) // '<%= username %>' ' username ' return code + Date.now() }) // 'Hello, username 1486718503160'