Regex查找前面没有特定字符的字符

Regex to find characters not having a certain character before them

本文关键字:字符 查找 前面 Regex      更新时间:2023-09-26

我在Javascript中有这些字符串:

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

我想做一个.replace(),用''#替换所有#而不使用'',但无法编写正确的正则表达式。

string2的结果应为''# ''# ''# ''# ''''# ''#

有什么想法吗?

更新

工作解决方案:

  • torazaburo的回答
  • gurvinder372的答案

尝试使用此替换函数

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

演示

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, "''#"));

您可以通过首先将哈希标记与前反斜杠匹配来将前无反斜杠的哈希标记作为目标,然后作为替代(使用交替运算符,也称为管道,|)尝试自己的哈希标记,因此,它将匹配前无反斜线的哈希标记,并在任何一种情况下用'#:替换

var string2       = '# ''# ''# # ''''# #';
var maybe_escaped = /''#|#/g;
var result        = string2.replace(maybe_escaped, '''#');
document.getElementById('result').textContent = JSON.stringify(result);
<div id='result' style="font-family: monospace; "></div>

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

/''?#/

此正则表达式似乎可以使用

(''''?)?#

Regex演示

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

('''')?#