我有以下字符串:
"Write the conjugate of each radical expression.\n\n**(a)** `$2\\sqrt{3} - 4$`\n\n**(b)** `$\\sqrt{3} +\\sqrt{2}$`\n\n**(c)** `$-2\\sqrt{3} - \\sqrt{2}$`\n\n**(d)** `$3\\sqrt{3} + \\sqrt{2} $`\n\n**(e)** `$\\sqrt{2} - \\sqrt{5}$`\n\n**(f)** `$-\\sqrt{5} + 2\\sqrt{2}$`"
我有以下函数可以通过字符串替换子字符串:
var changeString = function(markdownStr) {
return markdownStr.replace(/`/g, "").replace("$ ", "$").replace(" $", "$");
};
我得到的结果是它替换了某些条件(`),但不适用于最后一个替换条件(“ $”)。
以下是输出:
Write the conjugate of each radical expression. **(a)**$2\sqrt{3} - 4$ **(b)** $\sqrt{3} +\sqrt{2}$ **(c)** $-2\sqrt{3} - \sqrt{2}$ **(d)** $3\sqrt{3} + \sqrt{2} $ **(e)** $\sqrt{2} - \sqrt{5}$ **(f)** $-\sqrt{5} + 2\sqrt{2}$
您可以看到(d)选项,它仍然输出为$3\sqrt{3} + \sqrt{2} $
,但我希望它是$3\sqrt{3} + \sqrt{2}$
。
发生了什么,为什么不取代它?
这是一个Codepen示例: https://codepen.io/jae_kingsley/pen/MWyWZbN
答案 0 :(得分:2)
如果要替换值(而不是正则表达式),则仅替换 该值的第一个实例将被替换
因此,您可能应该对所有替换使用正则表达式,而不仅仅是第一个。别忘了您必须逃脱$
:
.replace(/\s\$/g, '$')
答案 1 :(得分:1)
将您的代码更改为跟随代码将起作用,因为它可以解释任何$
之前或之后或没有空格的空间。因此它将匹配 $
,$
,$
, $
等。
var changeString = function(markdownStr) {
return markdownStr.replace(/`/g, "").replace(/\s*\$\s*/g, '$');
};