2012-10-31 79 views
5

我有mathjax格式的一些HTML文本:紅寶石正則表達式來代替方程式

text = "an inline \\(f(x) = \frac{a}{b} \\) equation, a display equation \\[ F = m a \\] \n and another inline \\(y = x\\)" 

(注:方程單斜槓分隔,如\(,不\\(,額外\只是逃避的第一個爲紅寶石文本)。

我想獲得用於代替它的輸出,比如由latex.codecogs創建的圖像,例如,

desired_output = "an inline <img src="http://latex.codecogs.com/png.latex?f(x) = \frac{a}{b}\inline"/> equation, a display equation <img src="http://latex.codecogs.com/png.latex?F = m a"/> \n and another inline <img src="http://latex.codecogs.com/png.latex?y = x\inline"/> " 

使用Ruby。我嘗試:

desired = text.gsub("(\\[)(.*?)(\\])", "<img src=\"http://latex.codecogs.com/png.latex?\2\" />") 
desired = desired.gsub("(\\()(.*?)(\\))", "<img src=\"http://latex.codecogs.com/png.latex?\2\\inline\") 
desired 

但是,這是不成功的,只返回原始輸入。我錯過了什麼?我該如何構建適當的查詢?

+0

如果有人正在尋找它的哲基爾插件我寫來替換圖像mathjax方程是在這裏:https://github.com/cboettig/labnotebook/blob/32fcfcbc6f8d83b51d33d8d606ee1e51052dc4b0/_plugins/jekyll-labnotebook-plugins /codecogs.rb感謝@ justin-ko的幫助! – cboettig

回答

1

嘗試:

desired = text.gsub(/\\\[\s*(.*?)\s*\\\]/, "<img src=\"http://latex.codecogs.com/png.latex?\\1\"/>") 
desired = desired.gsub(/\\\(\s*(.*?)\s*\\\)/, "<img src=\"http://latex.codecogs.com/png.latex?\\1\inline\"/>") 
desired 

是必須發生的重大變化:

  • gsub,第一個參數是一個正則表達式(如安東尼提到的)
  • 如果第二個參數是一個雙引號字符串,則反向引用必須像\\2(而不是僅僅\2)(見在rdoc
  • 第一個參數是不逃避\

有一對夫婦的其他少量格式的東西(空格等)。

+0

輝煌,感謝您爲此工作。令人驚訝的是,不同語言之間regexpr可以有多少不同。感謝您的一個很好的解釋和乾淨的註冊表達! – cboettig

0

不知道如果你的正則表達式是正確的 - 但在Ruby中,正則表達式是由//分隔,嘗試這樣的:

desired = text.gsub(/(\\[)(.*?)(\\])/, "<img src=\"http://latex.codecogs.com/png.latex?\2\" />") 

你試圖做字符串substition,當然GSUB未找到包含字符串(\\[)(.*?)(\\])