用HTML字符替换句号

5
我遇到了一些代码问题。我输入一个文本,在段落中使用<mark>来高亮显示文本。但是当我加上一个句号以突出显示所有句号时,代码会出现错误,并给我实际的HTML代码和随机的高亮显示。所以我尝试添加一个替换器来更改句号。现在它不会出错,但是也不会突出显示任何内容。这是我用来将句号替换为HTML字符数字(&#46;)的代码:
var i = document.getElementById("Bar").value;
var inpu = $.trim(i);
var inp = inpu.replace(".", "&#46;");
var SearchReq = new RegExp("(\\b" + inp + "\\b)", "gim");
var Notes = document.getElementById("NoteHolder").innerHTML;
var after = Notes.replace(SearchReq, "<mark class=" + ColorOptionReady + ">$1</mark>");
document.getElementById("NoteHolder").innerHTML = after;

代码存在什么问题?(我尝试删除正则表达式中的"\b",但这并没有解决问题。)

1
在构建正则表达式“SearchReq”时,您需要转义正则表达式中具有特殊含义的字符。这包括句点、括号、方括号等。用HTML实体替换它们是没有帮助的,因为段落元素的HTML不包括HTML实体。 - nnnnnn
1个回答

5

. 替换为 \\ . (转义它, \\ 反斜杠需要保留反斜杠,以便在将字符串传递给RegExp时使用):

var inp = inpu.replace(".", "\\.");

你的错误原因是.在RegExp中有特殊含义,所以在传递给RegExp之前必须对其进行转义。
更多信息请参见正则表达式中特殊字符的含义
祝你好运!

1
你需要在字符串字面值中转义反斜杠。"\." - nnnnnn
@nnnnnn 为什么我需要使用“\。”而不是只用“\。”?另外,如果我要处理“\”,该怎么办?因为它会转义引号并且会破坏替换。 - Hawkeye
如果我只输入“。”它仍然会出错。 - Hawkeye
1
在Javascript字符串字面量中,反斜杠是转义字符,因此如果您想要一个实际的反斜杠在您的字符串中,您必须用另一个反斜杠进行转义。因此,字符串字面量"\\."创建了一个字符串,其中有一个反斜杠后跟着一个点(这是您正则表达式所需的)。字符串字面量"\."创建了一个只有点的字符串 - 因为它没有被转义字符跟随,所以反斜杠被忽略了。 - nnnnnn
@nnnnnn 哦,我明白你的意思了,感谢你提供有用的建议。 - Andriy Ivaneyko
这不起作用吗?它给了我 word\.,但没有突出显示任何内容。 - Hawkeye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接