如何在 Javascript MathJax 文本字符串中用井号替换多个美元 ($) 符号?

How to replace multiple dollar ($) signs by pound signs in a Javascript MathJax text string?

在字符序列中:- $$ \sin \theta $$ 我想用 £ 替换每个 $


(编辑:从那以后我了解到以下方法是矫枉过正,请忽略它。我添加了一个与一些关键学习点相关的答案。但是感谢 Jojo 先生给出了原始问题的答案)。


我看过这个问题的答案:-

我尝试应用列昂尼德的答案:-

var str = ..., reg = ...;
function replaceString(replaceValue) {
  return str.replace(reg, function () { return replaceValue });
}

这是我的解释:-

var str = "$$ \sin \theta $$";
//var reg = "/$/g" ;// TIL: reg is a regular expression so doesn't need "".
var reg = /$/g ; //... I tried varying the number of $ and/or backslashes,` without success so far.
var replaceValue = "£";
var output = replaceString( replaceValue ); 

//-----------------------------------------------

function replaceString( replaceValue ) 
{
  return str.replace ( reg, function () { return replaceValue });
}

//-----------------------------------------------

// desired output =  "££  \sin \theta ££"
// actual output  =  "$$  sin \theta $$".

它不起作用。

只需使用replaceAll()方法

let s1 = "$$  \sin \theta $$"
  , s2 = s1.replaceAll('$','£')
  ;
console.log ( s2 )

感谢 Jojo 先生,我了解到 replaceAll() 是解决我的特定问题的最佳方法。


我还学到了一个关键点:字符串表达式的显示方式取决于 (a) 它的输入方式和 (b) 它的显示方式。

(1) 如果您在 .html 文档中的 <div> 中键入 $$ \sin \theta $$,或者在实时 textbox 中键入 $$ \sin \theta $$,则调试器会将项目显示为 $$ \sin \theta $$ 和 console.log 将显示为 $$ \sin \theta $$.

(2) 并且如果您在 javascript 脚本中键入 str = String.raw #$$ \sin \theta $$#(其中 # 代表坟墓字符),那么调试器会将项目显示为 $$ \sin \theta $$ console.log 将显示为 $$ \sin \theta $$.

(3) 但是,如果您在 javascript 脚本中键入 str = "$$ \sin \theta $$",则调试器会将项目显示为 $$ \sin \theta $$,而 console.log 会将其显示为 $$ sin heta $$.


最后我了解到可以使用 .split 函数避免正则表达式,例如:-

//Method 1 enter   $$ \sin \theta = 0.5 $$  into a <div> 
//   or type/paste into a live input textbox 
//    debugger shows value as  $$ \sin \theta = 0.5 $$ 
// console.log shows value as  $$ \sin \theta = 0.5 $$   == GOOD.

//Method 2 define inputStr in a script or console using String.raw 
let inputStr = String.raw `$$ \sin \theta = 0.5 $$`;
// debugger    shows value as  $$ \sin \theta = 0.5 $$ 
// console.log shows value as  $$ \sin \theta = 0.5 $$   == GOOD.

//Method 3 define inputStr in a script or console
//let inputStr = "$$ \sin \theta = 0.5 $$"; 
// debugger    shows value as  $$ \sin \theta = 0.5 $$      
// console.log shows value as  $$  sin  heta = 0.5 $$    == BAD.

  
let tempArray = inputStr.split("") ;
var numChars = tempArray.length;

//... Replace HOT characters (e.g. "$" "\") by COOL characters (e.g. "£" "@" )

var outVal="";
for (var iii = 0; iii < numChars; iii++ )
{
    var aVal = tempArray[iii];
    if      ( aVal == "$" ) {aVal = "£"}  
      //else if ( aVal == "\" ) {aVal = "@"} ; // --> js error
    else if ( aVal == "\") {aVal = "@"} ; //... to replace single backslash

    outVal += aVal;             
}
        
//... Test that string can be converted back ...

var checkVal = "";
for (var iii = 0; iii < numChars; iii++ )
{
    var cVal = outVal[iii];
    if      ( cVal == "£") {cVal = "$" } 
    else if ( cVal == "@") {cVal = "\"} ; 
    checkVal += cVal;           
}
console.log (" input string    =", inputStr);
console.log ("converted outVal =", outVal  );
console.log ("        checkVal =", checkVal);   


// Actual results in console.log using method 2:-

//  input string    = $$ \sin \theta = 0.5 $$
// converted outVal = ££ @sin @theta = 0.5 ££
//         checkVal = $$ \sin \theta = 0.5 $$