2015-02-24 44 views
0

我在我的wordpress插件中构建自动链接功能,使用javascript和我有一个问题。匹配撇号和正确的单引号

输出帖子内容wordpress将撇号“'”转换为正确的单引号“'”。

例如在WordPress编辑后的内容如下:

<div class"post-content">This is content and don't skip this.</div> 

而且在前端撇号被替换HTML实体为“'”:

This is content and don’t skip this. 

然后我的JavaScript阵列包含应该链接的关键字。 我有问题,当我的关键字包含撇号,如:

"don't skip" 

我有这样的代码:

var patern = new RegExp("\\bdon't skip\\b", "gi"); 

if (patern.test(node.data)) { 
    link_keyword(node, element, link); 
} 

其中node.data是:

node.data = "This is content and don’t skip this." 

正如你可以看到关键字将不会在node.data中找到,因为在节点数据中是撇号而不是单引号。

我不想碰的内容,所以我试图用正确的单引号替换撇号在我的关键字“'”但后来我的关键词是这样的:

don�t skip 

如果我替换撇号右单引号“’” HTML实体会是这样的:

don&rsquo;t skip 

因此,在这两种情况下TI将不匹配,也不会被替换。 因此,有没有人有想法如何处理追逐时,我的关键字有撇号和在后内容是相同的关键字使用正确的单引号,而不是撇号,如何找到匹配。

+0

你可以试试:'var patern = new RegExp(“\\ bdon [''] t skip \\ b”,“gi”);' – anubhava 2015-02-24 14:56:47

+1

你有一个字符编码问题。 – CBroe 2015-02-24 15:10:56

+0

可能有用:https://wordpress.org/support/topic/please-give-us-the-option-to-turn-of-smart-quotes – 2015-02-24 15:18:31

回答

0

而不是检查为右撇号,只检查一个字符这样

node.data = "This is content and don’t skip this.";  

var pattern = new RegExp("\\bdon\.*t skip\\b", "gi"); 

pattern.test(node.data); 
=> true; 

这样,你不接触的数据,以防万一没有撇号,但只是也就是说它仍然会工作。如果你不希望它在没有“'”的情况下工作,那么只需在“\”后面删除“*”即可。