ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 正規表現で負の後読みを実装するにはどうすればよいですか?

JavaScript 正規表現で負の後読みを実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-19 06:53:13454ブラウズ

How Can I Implement Negative Lookbehind in JavaScript Regex?

JavaScript で負の後読みを実装する方法

JavaScript はネイティブでは負の後読みをサポートしていないため、次の文字列に一致する正規表現の作成が妨げられます。特定の文字で始めないでください。

による解決策後読みアサーション (2018 年以降)

2018 年、JavaScript は後読みアサーションを導入し、正と負の両方の後読みが可能になりました:

  • 正の後読み: (?<=...)
  • 否定後読み: (?

たとえば、次の正規表現は「jim」または「m」には「m」文字が含まれていますが、 'jam':

(?<!([abcdefg]))m

2018 年以前の解決策

2018 年以前の回避策の 1 つは、入力文字列を反転し、反転した正規表現と一致させ、その後、入力文字列を反転することでした。一致します。このプロセスは次のように実装できます:

const reverse = s => s.split('').reverse().join('');

const test = (stringToTests, reversedRegexp) => stringToTests
  .map(reverse)
  .forEach((s,i) => {
    const match = reversedRegexp.test(s);
    console.log(stringToTests[i], match, 'token:', match ? reverse(reversedRegexp.exec(s)[0]) : 'Ø');
  });<p><strong>例</strong></p>
<p>その使用法を説明するには:</p>
<ul><li>で説明した最初の質問については、コンテキストに応じて、次の正規表現は「jim」または「m」の「m」には一致しますが、一致しません。 'jam':</li></ul>
<pre class="brush:php;toolbar:false">test(['jim', 'm', 'jam'], /m(?!([abcdefg]))/)
  • 別の例、「max-height」は一致するが「line-height」は一致しない:
test(['max-height', 'line-height'], /thgieh(?!(-enil))/)

以上がJavaScript 正規表現で負の後読みを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。