正则表达式找到之前没有特定字符的字符

时间:2016-05-02 09:52:49

标签: javascript regex replace

我在Javascript中有这些字符串:

var string1 = '#23 the id of this report is \\# 23';
var string2 = '# \\# \\# # \\\\# #';

我想要.replace()替换所有 # ,而不是 \\ >使用\\#,但无法写出正确的正则表达式。

string2的结果应为\\# \\# \\# \\# \\\\# \\#

有什么想法吗?

更新

工作解决方案:

3 个答案:

答案 0 :(得分:2)

尝试使用此替换功能

 .replace(/[\\]{0,1}#/g, "\\#")

<强>样本

&#13;
&#13;
var string1 = '#23 the id of this report is \\# 23';
alert(string1.replace(/[\\]{0,1}#/g, "\\#"));
var string2 = '# \\# \\\# \# \\\\# #';
alert(string2.replace(/[\\]{0,1}#/g, "\\#"));
var string3 = '# \\# \\# # \\\\# #';
alert(string3.replace(/[\\]{0,1}#/g, "\\#"));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这个正则表达式似乎有用

(\\\\?)?#

<强> Regex Demo

注意: - 我假设\#将被替换为\\#。如果您希望输出为\\\#,则可以使用

(\\\\)?#

答案 2 :(得分:1)

您可以通过在它们之前首先匹配哈希标记反斜杠来定位没有反斜杠的哈希标记,然后作为替代方法(使用交替运算符,也称为管道,{{1} })自己尝试一个哈希标记,因此它会匹配哈希标记之前没有反斜杠,并在任何一种情况下用|替换:

&#13;
&#13;
\#
&#13;
var string2       = '# \\# \\# # \\\\# #';
var maybe_escaped = /\\#|#/g;
var result        = string2.replace(maybe_escaped, '\\#');

document.getElementById('result').textContent = JSON.stringify(result);
&#13;
&#13;
&#13;

另一种方法就是使用以下正则表达式,尽管上面的一个可能被认为更好地体现了问题的负面后视性质,并且更具概括性。

<div id='result' style="font-family: monospace; "></div>