JavaScriptは肯定先読みはできるが肯定後読みはできない

Pocket

JavaScriptの正規表現で該当文字列を全て抽出」について考えました。
matchで抽出した文字列に対しreplaceで無駄な部分を省く方法を使いました。
フラグ「g」を使うと必要な部分だけを抽出することができないからです。
しかし二度手間なのでスマートではありません。

「肯定先読み」を使うとあらかじめ無駄な部分を省くことができます。正規表現で「(?=パターン)」を使うとパターンに合致するか判定しますが抽出には含まれません。
しかしJavaScriptでは「肯定後読み」ができないそうです。
郵便番号を抽出する例で確認してみます。

元のテキスト

「郵便番号は001-1234、002-12345、0003-1234のどれか」という文字列から郵便番号を抽出します。
正しければ「001-1234」だけを抽出します。

通常

正規表現に「\d{3}-\d{4}」を使います。

001-1234
002-1234
003-1234

2番目と3番目も抽出してしまいました。

後が数値でない

まず後が数値でないケースを考えます。
正規表現として「\d{3}-\d{4}(?=\D)」を使います。肯定先読みです。
「\D」は半角数値以外を表します。「(?=\D)」とすると半角数値以外なのですが、抽出する文字列に含まれません。

001-1234
003-1234

2番目の「002-12345」は「002-1234」の後に「5」という半角数値があるので抽出されませんでした。
一方、3番目の「003-1234」はやはり抽出されてしまいました。

前が数値でない

次に前が数値でないケースを考えます。
肯定後読みを使いたいところです。肯定後読みは一般的には「(?<=パターン)」を使います。
正規表現として「(?<=\D)\d{3}-\d{4}」とするのですが、JavaScriptではエラーになります。
IEでは「正規表現で構文エラーが発生しました。」というメッセージが出ました。

[ 2013年12月21日 | カテゴリー: JavaScript | タグ: ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報