JS.next

JavaScriptの最新実装情報を追うブログ

正規表現の後読みが実装された

概要

後読みは「何かが直前に来る目標」を指す際に便利な表現である。


解説

先読み「(?=pattern)」 がpatternの直前の位置にマッチするのに対して、
後読み「(?<=pattern)」はpatternの直後の位置にマッチする。
どちらもpattern自体にはマッチしない。

先読みが「何かが続く目標」を指すのに向いているのに対して、
後読みは「何かに続く目標」を指すのに向いている。


基本:

// 肯定的後読み:lightかdeepに続く色を取り出す
let str1 = 'red, deep green, light blue, white'
str1.match(/(?<=(?:[light|deep] ))\w+/g)
  // ["green", "blue"]

// 否定的後読み:200X年を除いて項目を取り出す
let str2 = '1997:ES1\n1998:ES2\n1999:ES3\n2009:ES5\n2011:ES5.1\n2015:ES6'
str2.match(/(?<!200\d.+)ES.+/g)
  // ["ES1", "ES2", "ES3", "ES5.1", "ES6"]


応用:htmlからタグの名前を抜き出す(「<」に続く英字列)

document.documentElement.outerHTML.match(/(?<=<)[\w-]+/g)
  // ["html", "head", ......]


実装されるバージョン

V8 4.9.14