【发布时间】:2020-07-07 17:50:58
【问题描述】:
我想从给定的字符串中搜索和替换markdown的特殊字符(即\`*_{}[]()#+.!|-)。
我可以很容易地让它在 C# 中工作,因为有逐字的 @ 但 Javascript 没有得到什么问题。似乎与 /g 有关,我在另一篇文章中读到要求使用 replaceAll 但我找不到 string 的方法
C#版本
string test = @"B
*H*
C
**AB**";
Console.WriteLine ("Input " + test);
var pattern = @"[\\`*_{}\[\]()#+-.!]";
var _1 = Regex.Replace (test, "\r?\n", "<br/>");
var out_ = Regex.Replace (_1, pattern, m => @"\" + m.Value);
Console.WriteLine ("Output " + out_);
打字稿版本
const regexM = new RegExp(/[\\\`\*\_\{\}\[\]\(\)#\+-\.!\|]/g, 'm');
var input = `B
*H*
C
**AB**`;
var inputString = input.replace(regexM, function (y: any) { return "\\" + y; });
if (/\r|\n/.exec(inputString))
{
inputString = inputString .replace(/\r?\n/g, "<br/>");
}
inputString = inputString.replace(regexM, function (x: any)
{
return "\\" + x;
});
预期:B <br/>\*H\*<br/>C<br/>\*\*AB\*\*
我收到B <br/>\*H*<br/>C<br/>**AB**
【问题讨论】:
-
你确定有
inputString = valueString.replace(/\r?\n/g, "<br/>")吗?什么是valueString? -
对不起,它的
inputString在这里制作 MVCE 时忘记更改它。更新了问题。 -
请注意 C# 代码中存在一个错误(包含
-的模式)。而不是 lambda 表达式,您可以在字符串替换模式中使用$&,就像在 JS 中一样。要我加固定的C#代码sn-p吗? -
没关系。我主要在 C# 上工作,所以我首先在其中尝试了这种转换,因为它让我更快地理解和在 JS 中实现。正如您提到的,转义
-应该可以工作 -
无论如何,这里有一个 C# 调整:
var pattern = @"[][\\`*_{}()#+.!-]";和var out_ = Regex.Replace (_1, pattern, @"\$&");
标签: javascript regex typescript