我正在使用 CodeMirror并尝试创建我自己的 mode-changing demo 版本.我有一个 <textarea>
我在上面监听变化,当有变化时,我想查看 <textarea>
中的值判断是否为MathML形式。
所以我只需要一种非常粗糙/hackish 的方式来检测 <textarea>
中的值是否是 MathML;它不一定是完美的。我在想我可以在 <textarea>
时运行正则表达式更改并查找以下任何标记:
<mfrac>
<msup>
<msub>
<msqrt>
<mroot>
<mfenced>
<msubsup>
<munderover>
<munder>
<mtable>
<mtr>
<mtd>
<mrow>
<mi>
<mo>
我需要从 <textarea>
中取出字符串并查看这些标签中的任何一个是否是子字符串。我将如何编写此正则表达式?
最佳答案
/<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[^>]*>/
不保证匹配整个标签,但会确保有 >
。在标签开始之后。
编辑:
... what is /]*>/?
正则表达式必须在 /.../
内与字符串必须在引号内的方式相同,因为这就是 JavaScript 解释器从字符串、数字或任何其他类型的标记中判断正则表达式文字的方式。
<m
匹配任何 mathml 标签的前两个字符。 (?:
和 )
形成一个非捕获组。它与算术表达式中的括号相同。同样,您必须在 (a + b) * (c + d)
中使用括号我上面用括号来区分<m(?:frac|sup)
来自 <mfrac|sup
.后者将同时匹配 "<mfrac"
和 "sup"
没有 <m
在此之前。
\b
最后是一个单词中断。它说名字后面不应该有另一个单词字符。所以<msub\b
火柴"<msub"
但不是 "<msubmarine"
.
[^>]*
bit 匹配除 '>'
以外的任意数量的字符. [...]
是一个字符集,所以 [a-z]
匹配任何小写罗马字母。 ^
否定它,所以 [^a-z]
匹配任何不是小写罗马字母的字符。
关于javascript - 用于检测 JavaScript 文本区域中 MathML 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6638248/