【发布时间】:2020-11-28 02:16:25
【问题描述】:
在字符序列中:- $$ \sin \theta $$ 我想用£ 替换每个$。
(编辑:从那以后,我了解到以下方法太过分了,请忽略它。我添加了一个与一些关键学习点相关的答案。但感谢 Jojo 先生为原始问题提供了答案)。
我已经查看了这个问题的答案:- better-way-to-escape-dollar-signs-in-the-string-used-by-string-prot。
我已尝试应用 Leonid 的答案:-
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 $$".
它不工作。
【问题讨论】:
-
传递给
str.replace的函数应该只是字符串本身,所以:str.replace(/\$/g, '£')可以工作 -
"/\$/g"不是正则表达式,而是字符串;文字字符序列/$/g在str中没有出现,因此它不会被替换。/\$/g将针对每个$。/\${2}/g将针对$s 对。/\${2,}/g将针对至少两个$s 的组。阅读documentation onreplace和regular expressions。 -
@user4642212。感谢您澄清正则表达式。我确实希望针对每一个
$。我浏览了那些推荐的文档,但仍然不知道如何避免丢失\sin中的反斜杠。 -
@Tom 感谢您指出正则表达式字符串的格式。但是如果我进入控制台:
rep = "$$ \sin \theta $$".replace(/\$/g, '£'),我得到的答案是"££ sin heta ££"。但根据我的“答案”,我想我现在更了解事情了。
标签: javascript mathjax