【问题标题】:Regex replace _ with \_ inside dollar signs正则表达式用美元符号内的 \_ 替换 _
【发布时间】:2013-04-22 09:54:29
【问题描述】:

我有一个字符串

var str = "__Definition:__ $x_0$ is an _ordinary point_ of the ODE $L[y] = 0$";

我想替换 $$ 中的所有下划线,以便字符串变为

var str = "__Definition:__ $x\_0$ is an _ordinary point_ of the ODE $L[y] = 0$";

如何在 javascript 中做到这一点?

【问题讨论】:

  • 不太了解您想要什么,您的输出不一致,因为“是 ODE 的 普通点”也在两个 $ 符号之间,但在您的示例中没有任何反应_
  • 我不确定这是否是最好的解决方案,因此是评论,但我想你可以使用反向引用来实现这一点。你可以试试str.replace(/([^$]*\$[^$]*)_([^$]*\$[^$]*)/g,'\$1\\_\$2')jsfiddle.net/qqrdU

标签: javascript regex


【解决方案1】:

这可以在单个正则表达式替换调用中完成:

var str = "__Definition:__ $x_0$ is an _ordinary point_ of the ODE $L[y] = 0$";
var repl = str.replace(/_(?!(?:(?:[^$]*\$){2})*[^$]*$)/g, '\\_');
console.log(repl);

解释:表示匹配下划线字符不跟偶数个$符号。因此 2 个 $ 符号之间的 _ 将被匹配,而外部将不被匹配(因为它们后面跟着偶数个 $ 符号)。

现场演示:http://ideone.com/lAKto5

【讨论】:

    【解决方案2】:

    使用正则表达式进行此类解析活动不是一个好主意,但是,如果您想要快速和肮脏

    var replaced = str.replace(/\$([^$]+)\$/, function(m, g) { 
      return '$' + g.replace(/_/, '\\_') + '$'; 
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多