/\$(\$)?([^]*?)\$(\$)?/
匹配单$
双$
数学公式内容然后进行渲染
分割符号
/(<[^>]+>|\$\$.+?\$\$|\$.+?\$|&[a-zA-Z]{2,8};)/gim
<[^>]+>
:匹配HTML或者XML标签\$\$.+?\$\$
: 匹配类似Latex语法,+?
是非贪婪匹配,尽可能少\$.+?\$
: 同上,双美元是块渲染,单美元是行内渲染&[a-zA-Z]{2,8};
:匹配HTML实体,类似&
是;
|
:是支持多种模式/gim
: 多次匹配,多行模式,大小写不敏感
正则表达式
创建方式主要两种
- RegExp
regexp = new RegExp('patten','flags)
- 字面量
/abc/g
修饰符
常见
- g : 返回全部匹配项
- i : 大小写不敏感
- u : 开启unicode字符支持
- s: 开始点完全匹配模式
- m: 开启锚点多行模式
方法
搜索
字符串.match(正则表达式)
返回匹配的字符数组
没有/g
的话,还有.index
.input
等额外方法
没有匹配项返回null
替换
字符串.replace(正则表达式,replacement)
// 没有修饰符 g
alert( "We will, we will".replace(/we/i, "I") ); // I will, we will
// 带有修饰符 g
alert( "We will, we will".replace(/we/ig, "I") ); // I will, I will
replacement参数
符号 | 在替换字符串中的行为 |
---|---|
$& | 插入整个匹配项 |
`$`` | 插入字符串中匹配项之前的字符串部分 |
$' | 插入字符串中匹配项之后的字符串部分 |
$n | 如果 n 是一个 1-2 位的数字,则插入第 n 个分组的内容,详见 捕获组 |
$<name> | 插入带有给定 name 的括号内的内容,详见 捕获组 |
$$ | 插入字符 $ |
测试
字符串.test(正则表达式)
至少有一个就返回true
,否则返回false
字符类
\d
digit, 0-9
\s
space,类似\n
,\t
这种
\w
word, 字母,数字,下拉线_
反向类
\D
除数字的字符都行
\S
同上
\W
同上
点(.)匹配”所有字符“
点 .
是一种特殊字符类,它与“除换行符之外的任何字符”匹配。
例如:
alert('Z'.match(/./)) // Z
alert('A\nB'.match(/A.B/s)) // A\nB(匹配了!)
锚点:字符串开始 ^ 和末尾 $
插入符号 ^
和美元符号 $
在正则表达式中具有特殊的含义。它们被称为“锚点”。
插入符号 ^
匹配文本开头,而美元符号 $
则匹配文本末尾。
结合起来,就是可以实现完美匹配了
多行模式 修饰符m
加上了就可以匹配多行开头,多行结尾了
词边界
\b
有三种不同的位置可作为词边界:
- 在字符串开头,如果第一个字符是单词字符
\w
。 - 在字符串中的两个字符之间,其中一个是单词字符
\w
,另一个不是。 - 在字符串末尾,如果最后一个字符是单词字符
\w
。