添加另一个变量后,正则表达式替换不起作用

时间:2016-03-03 01:55:32

标签: javascript regex

我正在尝试使用变量tagName替换div中的文本。我以前工作过,但我添加了一些东西,它停止了工作。到目前为止,控制台显示的代码没有任何问题。这是我的替换函数(tagName是替换中我们尝试返回的单词,而Color是按钮给出的背景颜色。)

function removeMark (tagName, Color) {
var tagNameC = tagName.toUpperCase();
var IndAry = tags.indexOf(tagNameC);
tags.splice(IndAry, 1);
var Notes = document.getElementById("NoteHolder").innerHTML;
var MarkBack = new RegExp("(\\b + tagName + \\b)", "gim");
var ColorT = '"' + Color + '"';
var MarkBackTo = "<mark class='" + ColorT + "'>" + MarkBack + "</mark>"
var AfterRep = Notes.replace(MarkBackTo, "$1");
document.getElementById("NoteHolder").innerHTML = AfterRep;
var list = document.getElementById("myList");
var idmarker = "MarkID" + tagName;
var ElementID = document.getElementById(idmarker);
MarkList.removeChild(ElementID);
}

我要替换的示例是<mark class="YelBoxCol">Test</mark>,我正在尝试将其恢复为Test(测试为tagName)之前我添加了类以标记其工作完美,但现在它不会删除标记!

3 个答案:

答案 0 :(得分:1)

我对这段代码有疑问。让我们假设Color = 'YelBoxCol'; - &gt;字符串变量

var ColorT = '"' + Color + '"';
// output is "YelBoxCol"; --> string variable but with double quotes in the string as well so something like '"YelBoxCol"'
var MarkBackTo = "<mark class='" + ColorT + "'>" + MarkBack + "</mark>"
//output "<mark class='"YelBoxCol"'>yourRegex</mark>" --> you can see the double quotes in your class name.

这就是你的正则表达式崩溃的原因,因为它无法找到类名为"YelBoxCol"的元素,但是有一个类名YelBoxCol,而不是引号的差异。

因此,请将代码var ColorT = '"' + Color + '"';更改为

var ColorT = Color;

OR

将代码var MarkBackTo = "<mark class='" + ColorT + "'>" + MarkBack + "</mark>"更改为

var MarkBackTo = "<mark class=" + ColorT + ">" + MarkBack + "</mark>"

如果这还没有解决问题,那么我建议你逐行调试代码,检查其中的值,我相信你会发现问题,这是一个小问题,没有看到任何重大问题在你的代码中。

答案 1 :(得分:0)

我不太了解JavaScript,但我认为它不匹配,因为该类使用“”来标记它的名称,但是你打了额外的''在你的正则表达式。

尝试

var MarkBackTo = "<mark class=" + ColorT + ">" + MarkBack + "</mark>"

答案 2 :(得分:0)

我觉得你构建RegExp的方式不对。请尝试:

function removeMark(tagName, Color) {
  var tagNameC = tagName.toUpperCase();
  var IndAry = tags.indexOf(tagNameC);
  tags.splice(IndAry, 1);
  var Notes = document.getElementById("NoteHolder").innerHTML;
  var MarkBack = "(\\b + tagName + \\b)";
  var ColorT = '"' + Color + '"';
  var MarkBackTo = "<mark class='" + ColorT + "'>" + MarkBack + "</mark>"
  var AfterRep = Notes.replace(new RegExp(MarkBackTo, "gim"), "$1", );
  document.getElementById("NoteHolder").innerHTML = AfterRep;
  var list = document.getElementById("myList");
  var idmarker = "MarkID" + tagName;
  var ElementID = document.getElementById(idmarker);
  MarkList.removeChild(ElementID);
}