DevToolBox

正規表現の Lookbehind はどのブラウザで使える?

最終更新日: 2026-04-19公開日: 2026-04-19執筆: DevToolBox編集部

(?<=...)(?<!...) は強力ですが、長らく Safari が未対応で本番投入を ためらわれた機能でした。2026年現在は主要ブラウザすべてで動作しますが、対応バージョンを跨ぐ プロダクトでは今も注意が要ります。

JavaScript regex lookbehind is supported in all major evergreen browsers today, but the Safari/iOS cut-off (16.4, March 2023) still matters if you target older devices.

Regex Tester

lookbehindを含む正規表現が、お使いのブラウザで実際に動くかをその場で確認。マッチ箇所をハイライト表示します。

今すぐ試す →

TL;DR

1. ブラウザ対応表 / Browser support

ランタイム / Runtime対応開始 / Since備考 / Notes
Chrome / Edge62 (2017)可変長対応
Firefox78 (2020)可変長対応
Safari (macOS)16.4 (2023)それ以前は SyntaxError
iOS Safari16.4 (2023)iPhone 5s/6 系は更新停止で非対応
Node.js10+V8 準拠

2. 互換のための代替パターン / Fallback patterns

Safari 16.3 以前を含めて配信する場合、lookbehind を避けてキャプチャで書き換えます。

// ❌ 直接 lookbehind
"$100".replace(/(?<=\$)\d+/, m => Number(m) * 1.1);

// ✅ 代替: 先頭をキャプチャして残す
"$100".replace(/(\$)(\d+)/, (_, $, n) => $ + Number(n) * 1.1);

3. 実害が出るケース / Where it actually breaks

4. いつ lookbehind を使うべきか / When to use

Node.js (サーバ) とモダン Chrome/Edge の社内ツールでは積極的に使って構いません。 一方 B2C の公開 Web、メルマガ HTML の動的差し替え、広告配信タグなど、古い iOS が残る領域では 代替パターンを選ぶのが安全です。

5. Lookahead との違い / Lookbehind vs lookahead

構文 / Syntax名称意味
(?=x)肯定lookahead直後にxが続く位置にマッチ(xは消費しない)
(?!x)否定lookahead直後にxが続かない位置にマッチ
(?<=x)肯定lookbehind直前にxがある位置にマッチ(xは消費しない)
(?<!x)否定lookbehind直前にxがない位置にマッチ

lookaheadはES3(1999年)からJavaScriptで使え、ブラウザ対応で悩む必要はありません。対応状況が問題になるのは lookbehind((?<=(?<!)だけです。

6. 他言語での対応状況 / Support in other languages

ブラウザ間の対応差だけでなく、言語・正規表現エンジンごとに lookbehind の制約が異なります。 他言語のコードを JavaScript へ移植する際は特に注意してください。

言語・エンジン / Languagelookbehindの制約
JavaScript (V8/SpiderMonkey/JavaScriptCore)可変長OK(制約なし)
Python re固定長のみ(全ての選択肢が同じ長さである必要あり)。可変長が要るなら regex パッケージを使う
.NET (C#)可変長OK
Java可変長だが上限のある繰り返しのみ対応(無制限の量指定子は不可)
PHP / Perl (PCRE)伝統的に固定長のみ。バージョンにより異なるため事前に確認する

「Pythonで動いた正規表現をJSに移植したら動かない」という逆のパターンもあり得ます。Pythonは固定長制約が JSより厳しいため、Python側で通っていた可変長lookbehindはJSでは書き直しが必要な場合があります。

7. 機能検知でグレースフルに対応する / Feature detection

古いSafari/iOSを完全に切り捨てられない場合、lookbehindが使えるかを実行時に検知し、 エラーにせず代替ロジックへフォールバックする方法もあります。

function supportsLookbehind() {
  try {
    new RegExp("(?<=x)");
    return true;
  } catch {
    return false;
  }
}

const pattern = supportsLookbehind()
  ? /(?<=\$)\d+/
  : null; // null の場合は代替のキャプチャグループ実装へ分岐

SyntaxErrorは正規表現リテラルのパース時に発生するため、lookbehindを含む正規表現は 文字列からのnew RegExp()として動的に生成し、対応チェックの後でのみ使うようにすると 非対応環境でもスクリプト全体が落ちるのを防げます。

8. English summary

Regex lookbehind ((?<=x), (?<!x)) is universally supported in modern Chrome, Edge, Firefox and Node. Safari and iOS added it in 16.4(March 2023). For public-facing sites that still serve long-tail iOS users, prefer a capture-group fallback — a single unsupported regex throws SyntaxError at parse time and takes the whole script with it.

よくある質問 / FAQ

Safari で lookbehind は動く?
Safari 16.4 (2023年3月) 以降でサポートされます。iOS 16.4 以降も同様。古いバージョンを想定する場合はキャプチャグループ置換で代替。
Does Safari support regex lookbehind?
Yes — from Safari 16.4 / iOS 16.4 (released March 2023). Before that, use a capture-group fallback.
可変長 lookbehind は使える?
V8 (Chrome/Edge/Node) と Firefox は可変長対応。WebKit も対応済み。ただし古いランタイムに配る場合は固定長のみに留めると安全。

関連ツール / Related tools

関連ガイド / Related guides