如何在 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 $$
在字符序列中:- $$ \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 $$