1

我有一个字符串

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中做到这一点?

4

2 回答 2

2

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

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

解释:这意味着匹配下划线字符后跟偶数个$符号。因此_,两个$标志之间将被匹配,而外部将不匹配(因为它们后面跟着偶数个$标志)。

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

于 2013-04-22T10:05:43.837 回答
0

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

var replaced = str.replace(/\$([^$]+)\$/, function(m, g) { 
  return '$' + g.replace(/_/, '\\_') + '$'; 
});
于 2013-04-22T10:04:05.060 回答