命令由HTML實體我有一本字典的LaTeX命令/ HTML實體:更換(膠乳)字符串與JavaScript
var translations = [
{tex: '\\latex', html: 'LaTeX'},
{tex: '\\cup', html: '∪'},
{tex: '\\cap', html: '∩'},
{tex: '\\ldots', html: '…'},
{tex: '\\leftarrow', html: '←'},
{tex: '\\leftrightarrow', html: '↔'}
...
];
現在我想通過它的HTML實體,以取代各自的LaTeX命令。我猜最好的基本結構是這樣的:
function translateFromTexToHTML(string) {
for (i = 0; i < translations.length; i += 1) {
re = new RegExp('...\\' + translations[i].tex + '...');
string = string.replace(re, '...' + translations[i].html);
}
return string;
}
不幸的是,我找不出我需要哪個正則表達式。我嘗試這樣做:
var re = new RegExp('\\' + translations[k].tex + '([^a-zA-Z])', 'g');
string .replace(re, translations[k].html + '$1');
這部分的工作,例如,
\leftarrow \leftrightarrow becomes ← ↔
但是,例如,
\leftarrow\leftrightarrow becomes ←\leftrightarrow instead ←↔
我想這是因爲第二\cup
的反斜槓成爲部分更換第一個,因此不再匹配。
也是基本結構高效?
非常感謝。
我檢查了最後一個正則表達式,看起來你只是在* tex *之後使用這個字母。把它放在前面:'\\ leftarrow(?= [^ a-zA-Z])'。或者,只要使用一個字邊界'\\ leftarrow \ b'(這意味着*在非單詞之前匹配'w'(不是'[a-zA-Z0-9_]'字符*),也就是'var re = RegExp('\\'+ Tools.SVG.translations [k] .tex +'\\ b','g');'。 –
謝謝,不幸的是它不適用於字符串末尾的命令。 LaTeX實際上接受'\ leftarrow7'作爲命令'\ leftarrow',然後是(非命令)數字'7',所以這個詞邊界不起作用,但是這個向前看起來是這樣的。) – Daniel
正如一個音符:我也想在命令結束時刪除一個可選空間,這樣就有可能讓'A \ leftarrow B'以最小的空間出現爲'A←B':'(\\ s |(?![a-zA- Z]))' – Daniel