0

コードミラーのシンプルモードに正規表現を使用しようとしています。

それをテストするための私の最小限のコード:

CodeMirror.defineMode("regex", function() {
  return {
    token: function(stream, state) {
    console.log(stream);
    a = stream.match(/word/);
    console.log(a);
    stream.skipToEnd();
    return null;
    }
  };
});

最初のパスの出力は次のとおりです。

Object { start: 74, pos: 74, string: "This is a sentence with word and key in it, and word and key are repeated.", tabSize: 4, lastColumnValue: 0, lastColumnPos: 0, lineStart: 0 } regex.js:5
null

正規表現ではなく文字列「word」を使用すると、「null」ではなく「undefined」がログに記録されます。

コード ミラーのドキュメント ( http://codemirror.net/doc/manual.html ) は次のように述べています (関数の一致):

pattern は、文字列または ^ で始まる正規表現のいずれかです。

これは私には不明です(^は正規表現の「ない」を意味しますか?)

codemirror、正規表現、javascript を使用するのは初めてなので、明らかな何かが欠けている可能性があります。

4

2 に答える 2

0

はい、わかった

a = stream.match(/word/);

ストリームの現在の位置で正規表現をチェックします。つまり、ストリームが次の先頭にあるかどうかを確認します。

"This is a sentence with word and key in it, and word and key are repeated."

次に、最初の文字のみをチェックし、正規表現と一致しないため「T」で停止し、「null」を返します。

したがって、正規表現が満たされていない間にストリームを進めることは理にかなっています。

于 2014-11-04T03:16:40.413 に答える
0

だと思います^word。行頭を参照し、行の終わりを参照する^開始アンカーと呼ばれます。が文字クラスの先頭にある$場合、リスト内の特定の文字の否定を表します。^[]

例: [^:]- 任意の文字に一致しますが、次の文字には一致しません:

于 2014-10-28T11:07:02.430 に答える