1

JavaScriptのRegExpエンジンで可変長後読みアサーションがサポートされているかどうか疑問に思っていますか?

たとえば、文字列「[多くの空白やタブ]可変長の後ろ向き」の文字列「可変長」を一致させようとしています。このようなものがありますが、さまざまな正規表現テスターではうまくいきません。 :

^(?<=[ \t]+).+(?= lookbehind)

それが違法なパターンである場合、それに対する良い回避策は何でしょうか?ありがとう!

4

4 に答える 4

2

Javascriptには後読みがまったくありません。Steven Levithanは、それを模倣するためのいくつかの発言を書いています。これは役立つかもしれません。

私はあなたの例を完全には理解していません、なぜならこれは法案に合うように思われるからです:

/^\s+(.+)lookbehind$/

...これは、1つ以上の空白文字、それに続く1つ以上の任意の文字(キャプチャグループ内)、それに続く「lookbehind」という単語に一致します。このように使用されます:

var str = "        variable length lookbehind";
var match = /^\s+(.+)lookbehind$/.exec(str);

この配列を生成します:

match[0]: |        variable length lookbehind|
match[1]: |variable length|

Javascriptでは、配列の最初のエントリは一致した文字列全体であり、後続のエントリはキャプチャグループです。

しかし、あなたは明らかに正規表現をよく理解しているので、それがあなたが探しているものかどうかはわかりません...

この一般的な領域で注意すべき点は、JavascriptでのRegExpエンジンの実装の多くが正しく処理されないことです\s(ASCII範囲より上の空白文字の一致を見逃します)。ここでS_REGEXP_WHITESPACE_CHARACTER_CLASS_BUGGYテストを参照してください。

于 2010-05-07T08:45:59.040 に答える
2

Javascript正規表現エンジンは後読みをサポートしていません。先読みのみがサポートされています。ここで模倣ソリューションを見つけることができます:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

于 2010-05-07T08:46:56.323 に答える
2

より高速なJavaScriptトリムを参照してください

トリムを実行できるさまざまな方法を示し(いずれも後読みを必要としません)、さまざまなアプローチの速度も比較します。最終目標に先頭の空白の削除が含まれている場合は、それを複数の操作に分割することを恐れないでください。

問題に直面したときに、「わかっている、正規表現を使用する」と考える人もいます。今、彼らは2つの問題を抱えています-ジェイミー・ザウィンスキー

于 2010-05-07T08:49:28.020 に答える
2

これが正規表現で役立つかどうかはわかりませんが、空白を削除したい場合は、トリム機能を使用できます

function trimAll(sString) {
  while (sString.substring(0, 1) == ' ') {
    sString = sString.substring(1, sString.length);
  }
  while (sString.substring(sString.length - 1, sString.length) == ' ') {
    sString = sString.substring(0, sString.length - 1);
  }
  return sString;
}

それ以外の場合、文字列の存在を確認したい場合は 、StackOverflow.comでindexOfIndexOfを使用できます

于 2010-05-07T08:53:54.550 に答える