参考文章:
https://github.com/alsotang/node-lessons/tree/master/lesson9
《正则表达式30分钟入门教程 》:
http://deerchao.net/tutorials/regex/regex.htm
《正则表达式之:零宽断言不『消费』》:
http://fxck.it/post/50558232873
js中的正则表达式需要注意的地方:
第一,
js 中,对于四种零宽断言,只支持 零宽度正预测先行断言 和 零宽度负预测先行断言 这两种。
第二,
js 中,正则表达式后面可以跟三个 flag,比如 /something/igm。
他们的意义分别是,
i 的意义是不区分大小写
g 的意义是,匹配多个
m 的意义是,是 ^ 和 $ 可以匹配每一行的开头。
第三,
大家知道,. 是不可以匹配 \n 的。如果我们想匹配的数据涉及到了跨行,比如下面这样的。
var multiline = require('multiline');
var text = multiline.stripIndent(function () {
/*
head
```
code code2 .code3```
```
foot
*/
});
如果我们想把两个 “` 中包含的内容取出来,应该怎么办?
直接用 . 匹配不到 \n,所以我们需要找到一个原子,能匹配包括 \n 在内的所有字符。
这个原子的惯用写法就是 [\s\S]
var match1 = text.match(/^```[\s\S]+?^```/gm);
console.log(match1) // => [ '```\ncode code2 code3```\n```' ]
// 这里有一种很骚的写法,[^] 与 [\s\S] 等价
var match2 = text.match(/^```[^]+?^```/gm)
console.log(match2) // => [ '```\ncode code2 .code3```\n```' ]
完。