1

私はCodeMirrorを使用しており、モード変更デモの独自のバージョンを作成しようとしています。変更をリッスンする があり、変更があった場合、 の値を調べて、MathML の形式であるかどうかを判断<textarea>したいと考えています。<textarea>

<textarea>したがって、の値がMathMLであるかどうかを検出するには、非常に粗雑でハックな方法が必要です。完璧である必要はありません。<textarea>が変更されたときに正規表現を実行して、次のタグのいずれかを探すことができると考えています。

<mfrac>
<msup>
<msub>
<msqrt>
<mroot>
<mfenced>
<msubsup>
<munderover>
<munder>
<mtable>
<mtr>
<mtd>
<mrow>
<mi>
<mo>

から文字列を取得し、<textarea>これらのタグのいずれかが部分文字列かどうかを調べる必要があります。この正規表現をどのように記述しますか?

4

1 に答える 1

3
/<m(?:frac|sup|sub|sqrt|root|fenced|subsup|underover|under|table|tr|td|row|i|o)\b/

そのようなタグの開始を識別します。

整形式のタグ全体を見つけるには、終了の前に属性を探す必要がありますが、>これはより困難です。何かのようなもの

/<m(?:frac|sup|sub|sqrt|root|fenced|subsup|underover|under|table|tr|td|row|i|o)\b[^>]*>/

タグ全体に一致するとは限りませんが>、タグの開始後に があることを確認します。

編集:

... /]*>/ とは?

正規表現は/.../、文字列が引用符内にある必要があるのと同じように内側にある必要があります。これは、JavaScript インタープリターが文字列、数値、またはその他の種類のトークンから正規表現リテラルを伝える方法であるためです。

<m、任意の mathml タグの最初の 2 文字に一致します。(?:とは)非キャプチャ グループを形成します。算術式の括弧と同じです。同じように、 で括弧を使用する必要があります。(a + b) * (c + d)上の括弧を使用して と区別<m(?:frac|sup)<mfrac|supます。後者は両方に一致し、その前にa がありませ"<mfrac"ん。"sup"<m

最後は\b単語区切りです。名前の後に別の単語文字があってはならないということです。一致しますが、<msub\b一致"<msub"しません"<msubmarine"

[^>]*ビットは、. 以外の任意の数の文字に一致します'>'。は[...]文字セットであるため、[a-z]小文字のローマ字に一致します。はそれ^を否定するため、[^a-z]小文字のローマ字以外の任意の文字に一致します。

于 2011-07-09T23:53:09.710 に答える