正则表达式捕获utf-8行分隔符

时间:2014-01-09 17:20:35

标签: javascript regex utf-8

似乎Javascript的原生正则表达式无法使用插值行分隔符U + 2028捕获字符串。例如,当我尝试:

"a\u2028b".match(/(.*)/)

我只能捕获“a”而不是完整的字符串。

是否有这种行为的原因,或者只是Javascript无法管理一些utf-8字符?有没有办法使用Javascript的本机正则表达式来解决这个问题?

2 个答案:

答案 0 :(得分:1)

这就是应该如何运作的。为了匹配.^$元字符,U+2028U+2029被归类为行分隔符以及\r回车符号)和\n(换行)。

...在JavaScript中,就是这样。每个正则表达式都有自己的想法,哪个字符是行分隔符。例如,Java识别所有这些加上U+0085(下一行或NEL)字符,而.NET只识别\n

答案 1 :(得分:0)

使用此正则表达式:

"a\u2028b".match(/^[\s\S]*$/);
// matches ab

在javascript中.与换行符不匹配,因此[\s\S]也用于匹配换行符。