正则表达式用_美元符号替换_

时间:2013-04-22 09:54:29

标签: javascript regex

我有一个字符串

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

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

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

我怎样才能在javascript中执行此操作?

2 个答案:

答案 0 :(得分: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);

说明:表示匹配下划线字符NOT后跟偶数$个符号。因此,_之间的$符号将被匹配,而且外部将不会匹配(因为这些符号会跟随偶数个$符号)。

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

答案 1 :(得分:0)

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

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