「正則表達式的 s
(dotAll) flag」 提案 proposal-regexp-dotall-flag 由 Mathias Bynens 負責,目前已經進入 stage 4,並將成爲 ES9(ES2018) 的一部分。html
在 JavaScript 正則表達式中 .
用來匹配任何單個字符。可是有 2 個例外:java
let regex = /^.$/; regex.test('?'); // false
咱們能夠經過設置 u
標誌來解決,u
的含義是 unicode:git
let regex = /^.$/u; regex.test('?'); // true
行終結符包含:github
\n
) - 換行\r
) - 回車還有一些其它字符,也能夠做爲一行的開始:web
\v
)\f
)目前 JavaScript 正則表達式的 .
能夠匹配其中的一部分:正則表達式
let regex = /./; regex.test('\n'); // false regex.test('\r'); // false regex.test('\u{2028}'); // false regex.test('\u{2029}'); // false regex.test('\v'); // true regex.test('\f'); // true regex.test('\u{0085}'); // true
在正則表達式中,用於表示字符串開頭和字符串結尾的元字符是 ^
和 $
, 所以一個變通的方式是使用 ^
來匹配。api
/foo.bar/.test('foo\nbar'); // false /foo[^]bar/.test('foo\nbar'); // true
或者使用 \s
來匹配空白字符:babel
/foo.bar/.test('foo\nbar'); // false /foo[\s]bar/.test('foo\nbar'); // true
在最新的 ECMAScript 規範中,爲 JavaScript 的正則表達式增長了一個新的標誌 s
用來表示 dotAll。以使 .
能夠匹配任意字符。app
/foo.bar/s.test('foo\nbar'); // true
High-level API異步
const re = /foo.bar/s; // 等價於 const re = new RegExp('foo.bar', 's'); re.test('foo\nbar'); // true re.dotAll; // true re.flags; // "s"
既然是爲了實現 dotAll 功能,爲何不命名爲 d
或者 a
。由於在其它語言的正則表達式實現中,已經使用 s
標誌了:
Pattern.DOTALL
RegexOptions.Singleline
re.DOTALL
和 re.S
在支持正則表達式使用 flag 的語言如 Perl、PHP 也使用 s
做爲標誌。
s
的含義是 singleline 和 dotAll。
singleline(單行)對應的是 multiline(多行)。
m
標誌用於指定多行輸入字符串應該被視爲多個行。若是使用 m
標誌,^
和 $
匹配的開始或結束是字符串中的每一行,而不是整個字符串的開始或結束。
/^java/.test('just\njava\n'); // false /^java/m.test('just\njava\n'); // true
m
標誌隻影響 ^
和 $
s
標誌隻影響 .
目前在 JavaScript 正則表示中全部修飾符的含義:
regexpu (transpiler) with the { dotAllFlag: true }
option enabled