re = /(?<katex_all>
(?:
(?<!\\|\$)
(?<katex_open>
\${2}
|
\${1}
)
(?!\$)
\n?
(?<katex_content>.+?)\n?
(?<!\\|\$)
(?<katex_close>\g{katex_open})
(?!\$)
\n?
)
|
(?:
(?<!\\)
(?<katex_open>\\\[)
\n?
(?<katex_content>.+?)\n?
(?<!\\)
(?<katex_close>
\\\]
)\n?
)
|
(?:
(?<!\\)
(?<katex_open>\\\()
\n?
(?<katex_content>.+?)\n?
(?<!\\)
(?<katex_close>
\\\)
)\n?
)
)/mx
str = '$$
\\Gamma(z) = \\int_0^\\infty t^{z-1}e^{-t}dt\\,.
$$
This is some text $math \\frac12$
other text $\\unsupported$
Other node \\[ displaymath \\\\[\\\\] \\frac{1}{2} \\] blah
$$ \\int_2^3 $$
more text \\(and math\\) blah
And $math with a
\\$ sign$.
This should not match↓
$$$
\\Gamma(z) = \\int_0^\\infty t^{z-1}e^{-t}dt\\,.
$$$
This should not match either
$$
\\Gamma(z) = \\int_0^\\infty t^{z-1}e^{-t}dt\\,.
$
'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html