替换$ sign的jQuery将$符号添加到字符串的末尾

时间:2015-11-18 21:18:26

标签: jquery

所以,我的整个项目是通过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/

2 个答案:

答案 0 :(得分:2)

使用new RegExp("\\"+keywords[i],"gi") 处理特殊字符。 $是一个特殊角色。

Fiddle

答案 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;导致更多的循环超出必要的速度,从而降低了页面的性能。