因此,我的总体项目是通过PHP的imap从AJAX调用中获取电子邮件。这就完成了。我有所有的电子邮件,它们是分开的。
我现在正在浏览每封电子邮件,并通过用<b>word</b>
替换单词来"突出显示"某些单词。这基本上是有效的。我很想用美元符号来做这件事,但它造成了一个非常奇怪的问题。
假设我有一封电子邮件,上面写着:
It will cost $500. How's thursday sound?
我有一个数组,里面装满了我想"突出显示"的单词:
var keywords = [
....
"Wednesday",
"wednesday",
"Thursday",
"thursday",
"Friday",
"friday",
....
":",
"$",
"%",
....
]
(省略号显示在您看到的内容之前和之后有许多关键字)。
我用这个来替换每个单词并将其加粗:
function highlightImportant(that) {
that.find('.email-container').each(function(){
var full_text = $(this).text();
$.each(keywords, function(i) {
full_text = full_text.replace(new RegExp(keywords[i],"gi"), "<b>"+keywords[i]+"</b>");
});
$(this).html(full_text);
});
}
这适用于所有的单词和字符,但美元符号的行为非常奇怪。问题是,由于某种原因,当它运行时,它每次都会在电子邮件(字符串)的末尾添加一个美元符号,然后只将该美元符号加粗。。。。因此,对于每封电子邮件,它都会在末尾添加另一个美元符号:
It will cost $<b>5</b><b>0</b><b>0</b>. How's <b>thursday</b> sound?<b>$</b>
注意到$500
开头的美元符号没有加粗,而是在字符串末尾添加了一个美元符号?
看看这把小提琴,自己看看:http://jsfiddle.net/2L3vhtwh/1/
使用new RegExp("\"+keywords[i],"gi")
以处理特殊字符。$
是一个特殊的字符。
Fiddle
如果要将关键字扩展为包含正则表达式,则需要将转义添加到数组中的项,而不是直接添加到RegExp中。对于你目前拥有的内容,@void很准确,但如果你想进行更复杂的搜索,比如以"谁"、"什么"、"哪里"、"为什么"或"何时"开头的句子(例如,试图确定被解析的句子是否是一个问题),那么像"^Wh(o|at|ere|y|en)"这样的东西就会被过度转义,因为克拉对你来说意味着特殊的东西。
只是对未来设计考虑的一个提醒。
此外,根据您的代码,"gi"的意思是全局的,不区分大小写。使用"星期五"one_answers"星期五"会导致超出必要的循环,从而降低页面的性能。