2011-07-09 3 views
1

私はCodeMirrorを使用しており、mode-changing demoの独自のバージョンを作成しようとしています。私は<textarea>を持っています。その上で私は変更を待ち受けています。変更があるときは、<textarea>の値を見て、それがMathMLの形式であるかどうかを調べたいと思います。正規表現でJavaScriptのtextareaでMathMLを検出する

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

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

私はこれらのタグのいずれかがサブある場合<textarea>から文字列を取得して調べる必要があります。どのように私はこの正規表現を書くだろうか?

答えて

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[^>]*>/ 

のようなものは、全体のタグに一致するように保証するものではありませんが、タグの開始後>があることを確認します。

EDIT:

...何ですか/] *> /?

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

<mは、任意のmathmlタグの最初の2文字に一致します。 (?:および)は非捕捉群を形成する。これは、算術式のかっこと同じです。同じ方法で、かっこを(a + b) * (c + d)で使用する必要があります。<m(?:frac|sup)<mfrac|supを区別するために、上記のかっこを使用します。後者は<mの前に"<mfrac""sup"の両方に一致します。

最後の\bは改行です。それは名前の後に別の単語の文字があってはならないと言います。したがって<msub\b"<msub"と一致しますが、"<msubmarine"では一致しません。

[^>]*ビットは、'>'以外の任意の文字数に一致します。 [...]は文字セットなので、[a-z]はすべて小文字のローマ字に一致します。 ^はそれを無効にします。したがって、[^a-z]は、小文字のローマ字ではない文字と一致します。

+0

中間が文字 'm'で始まるタグのいずれかにマッチしていると理解していますが、その正規表現の最初と最後を説明できますか?// m(?: 'と' \ b [^>] *//)は何ですか? – Hristo

+0

@Hristo、説明付き投稿を編集しました –

+0

@Mike ...ありがとう! – Hristo

関連する問題