ES2018新特性异步迭代器正则表达式反向(lookbehind)断言正则表达式Unicode转义序列模板字符串正则表达式s/dotAll模式(本文)正则表达式命名捕获组对象扩展运算符Promise。prototype.finally“s(dotAll)flagofregularexpression”提案proposal-regexp-dotall-flag由MathiasBynens负责,已进入阶段4,将成为ES9(ES2018)的一部分。1.概述JavaScript中的正则表达式。用于匹配任何单个字符。但有2个例外:1.1多字节表情符号字符letregex=/^.$/;regex.test('?');//false我们可以通过设置u标志来解决,u的意思是unicode:letregex=/^.$/u;regex.test('?');//true1.2lineterminatorcharacters(行终止字符)行终止符包括:U+000ALINEFEED(LF)(\n)-换行U+000DCARRIAGERETURN(CR)(\r)-回车U+2028LINESEPARATOR-行分隔符U+2029PARAGRAPHSEPARATOR-段分隔符还有一些其他字符也可以用作行首:U+000BVERTICALTAB(\v)U+000CFORMFEED(\f)U+0085下一行当前JavaScript正则表达式的一部分可以匹配其中的一部分:letregex=/./;regex.test('\n');//falseregex.test('\r');//falseregex.test('\u{2028}');//falseregex.test('\u{2029}');//falseregex.test('\v');//trueregex.test('\f');//trueregex.test('\u{0085}');//正则表达式中为真,用来表示字符串的开头和字符串的结尾字符是^和$,所以一个变通的方法是用^来匹配。/foo.bar/.test('foo\nbar');//false/foo[^]bar/.test('foo\nbar');//true或使用\s匹配空格:/foo.bar/.test('foo\nbar');//false/foo[\s]bar/.test('foo\nbar');//真2。添加了s/dotAll标志在最新的ECMAScript规范中,为JavaScript正则表达式添加了一个新标志s来表示dotAll。以便。可以匹配任何字符。/foo.bar/s.test('foo\nbar');//trueHigh-levelAPIconstre=/foo.bar/s;//相当于constre=newRegExp('foo.bar','s');re.test('foo\nbar');//truere.dotAll;//truere.flags;//"s"3.命名由来既然是实现dotAll的功能,为什么不命名为d或者a。因为在其他语言的正则表达式实现中已经使用了s标志:Java使用Pattern.DOTALLC#而VB使用RegexOptions.SinglelinePython在支持正则表达式使用标志的语言中同时支持re.DOTALL和re.S,例如Perl、PHP也使用s作为标志。s表示单线和dotAll。singleline(单行)对应multiline(多行)。m标志用于指定应将多行输入字符串视为多行。如果使用m标志,^和$匹配字符串中每一行的开头或结尾,而不是整个字符串的开头或结尾。/^java/.test('just\njava\n');//false/^java/m.test('just\njava\n');//truem标志仅影响^和$s标志。目前,JavaScript正则表示中所有修饰符的含义:g→globali→ignoreCasem→multiliney→stickyu→unicodes→dotAll4。实施V8-Chrome62JavaScriptCore-Safari技术预览版39aXS,自2018年1月17日起在Moddable中发布updateregexpu(transpiler),启用{dotAllFlag:true}选项onlinedemoBabelpluginCompat-transpilerofRegExpTreeBabelplugin
