所以,我的整个项目是通过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/
答案 0 :(得分:2)
使用new RegExp("\\"+keywords[i],"gi")
处理特殊字符。 $
是一个特殊角色。
答案 1 :(得分:0)
如果要扩展关键字以包含正则表达式,则需要将转义添加到数组中的项目,而不是直接在RegExp中。对于你现在拥有的东西,@ void是有用的,但如果你想进行更复杂的搜索,比如以&#34; Who&#34;,&#34; What&#34;,&#34; Where && #34;,&#34;为什么&#34;或&#34;当&#34; (例如,试图确定被解析的句子是否是一个问题)然后像&#34; ^ Wh(o | at | ere | y | en)&#34;因为克拉对你来说意味着特别的东西,所以会过度逃避。
专注于未来的设计考虑。
另外 - 根据您的代码,&#34; gi&#34;全局和不区分大小写。周五&#34;星期五&#34;和&#34;周五&#34;导致更多的循环超出必要的速度,从而降低了页面的性能。