【问题标题】:Regex not working for multiple characters正则表达式不适用于多个字符
【发布时间】: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 &lt;br/&gt;\*H\*&lt;br/&gt;C&lt;br/&gt;\*\*AB\*\*

我收到B &lt;br/&gt;\*H*&lt;br/&gt;C&lt;br/&gt;**AB**

【问题讨论】:

  • 你确定有inputString = valueString.replace(/\r?\n/g, "&lt;br/&gt;")吗?什么是valueString
  • 对不起,它的inputString 在这里制作 MVCE 时忘记更改它。更新了问题。
  • 请注意 C# 代码中存在一个错误(包含 - 的模式)。而不是 lambda 表达式,您可以在字符串替换模式中使用 $&amp;,就像在 JS 中一样。要我加固定的C#代码sn-p吗?
  • 没关系。我主要在 C# 上工作,所以我首先在其中尝试了这种转换,因为它让我更快地理解和在 JS 中实现。正如您提到的,转义 - 应该可以工作
  • 无论如何,这里有一个 C# 调整:var pattern = @"[][\\`*_{}()#+.!-]";var out_ = Regex.Replace (_1, pattern, @"\$&amp;");

标签: javascript regex typescript


【解决方案1】:

你可以使用

const regexM = /[\\`*_{}[\]()#+.!|-]/g;

var input = `B 
*H*
C
**AB**`;

var inputString = input.replace(regexM, "\\$&");
inputString = inputString.replace(/\r?\n/g, "<br/>");
console.log(inputString);
// => B <br/>\*H\*<br/>C<br/>\*\*AB\*\*

注意:

  • regexM 正则表达式中的 - 形成一个范围,您需要对其进行转义,或者 - 如上面的代码 - 将其放在字符类的末尾
  • 不使用回调方法,为了引用整个匹配,您可以在字符串替换模式中使用$&amp; 占位符
  • 当您使用正则表达式文字定义正则表达式时,形成正则表达式转义只需要一个反斜杠,因此const regexM = /[\\`*_{}[\]()#+.!|-]/g 等于const regexM = new RegExp("[\\\\`*_{}[\\]()#+.!|-]", "g")
  • if (/\r|\n/.exec(inputString))不用检查是否有换行符,运行.replace即可。

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多