私はパーサーを書いているので、パフォーマンス上の理由から入力文字列を細かくしないでください。正規表現を文字列の途中で開始インデックスとどのようにマッチさせるか?
const Stream = (string, cursor) => Object.freeze({
string,
cursor,
length: string.length - cursor,
slice: (start, end) => string.slice(start + cursor, end ? start + end : undefined),
move: distance => stream(string, cursor + distance),
})
私は、この文字列にマッチさせる正規表現を使用することができるようにしたい:したがって、私は、カーソルを文字列で表しStream
オブジェクトを作成しました。しかし、カーソルの前には何も気にしません。だから私は、次の文字列と、カーソルがあるとします。
> string = 'hello ABCD'
'ABCD'
> cursor = 6
6
だから我々はA
前に、何も気にしないが、私たちはこれらすべての大文字に一致するように正規表現を使用することができるようにしたい:
> re = /^[A-Z]+/
/^[A-Z]+/
これを動作させる方法がわかりません。 g
フラグを使用すると、RegExp.exec
を使用でき、lastIndex
のプロパティが記録されます。しかし、^
の試合はlastIndex
で開始しません...
どのように私は効率的にこれを得ることができますか? $
sed -rn 's/^.{'$cursor'}([A-Z]+)$/\1/p'
:私はサードパーティの正規表現ライブラリを使用する必要がある場合は、
なぜ '^。{6} [A-Z] +'のようなものを使わないのですか? –
面白いアイデアだ... ^^ {10006} [A-Z] + ' – Chet
これは何度も繰り返すが、パフォーマンスの問題を測定したのだろうか? –