Javascript 正则表达式和单词搜索不匹配带空格的单词
我必须匹配阿拉伯语文本,并用当前脚本突出显示它们,我可以突出显示或将它们包装在一个链接中,仅用于单个单词,如何修改此脚本,使其也可以匹配多个单词Javascript 正则表达式和单词搜索不匹配带空格的单词,javascript,jquery,html,regex,highlight,Javascript,Jquery,Html,Regex,Highlight,我必须匹配阿拉伯语文本,并用当前脚本突出显示它们,我可以突出显示或将它们包装在一个链接中,仅用于单个单词,如何修改此脚本,使其也可以匹配多个单词 text = text.replace( /([\u0600-\u06ff]+)([^\u0600-\u06ff]+)?/g, replacer); 完整代码 (function () { // Our keywords. There are lots of ways you can produce // this map,
text = text.replace(
/([\u0600-\u06ff]+)([^\u0600-\u06ff]+)?/g,
replacer);
完整代码
(function () {
// Our keywords. There are lots of ways you can produce
// this map, here I've just done it literally
//الولايات المتحدة الأمريكية, الولايات المتحدة, اوباما, وأمريكا, والتفاوض, وإيران, الاتفاق النووي, الخليج العربي, الخليج الفارسي
var keywords = {
"الخليج العربي": true,
"الاتفاق النووي": true,
"الخليج العربي": true,
"وإيران": true,
"والتفاوض": true,
"وأمريكا": true,
"اوباما": true,
"الولايات المتحدة": true,
"الولايات المتحدة الأمريكية": true
};
// Loop through all our paragraphs (okay, so we only have two)
$("p").each(function () {
var $this, text;
// We'll use jQuery on `this` more than once,
// so grab the wrapper
$this = $(this);
// Get the text of the paragraph
// Note that this strips off HTML tags, a
// real-world solution might need to loop
// through the text nodes rather than act
// on the full text all at once
text = $this.text();
// Do the replacements
// These character classes just use the primary
// Arabic range of U+0600 to U+06FF, you may
// need to add others.
text = text.replace(
/([\u0600-\u06ff]+)([^\u0600-\u06ff]+)?/g,
replacer);
// Update the paragraph
$this.html(text);
});
// Our replacer. We define it separately rather than
// inline because we use it more than once
function replacer(m, c0, c1) {
// Is the word in our keywords map?
if (keywords[c0]) {
// Yes, wrap it
c0 = '<a class="red" href="#">' + c0 + '</a>';
}
return c0 + c1;
}
})();
(函数(){
//我们的关键词。你可以用很多方法制作
//这张地图,在这里,我已经完成了
//الولايات المتحدة الأمريكية, الولايات المتحدة, اوباما, وأمريكا, والتفاوض, وإيران, الاتفاق النووي, الخليج العربي, الخليج الفارسي
变量关键字={
“真的吗,
“真的,
“真的吗,
“وإيان”:正确,
“真的”,
“وأميكا”:正确,
“ابااا”:对,
是的,
“真的吗
};
//循环浏览我们的所有段落(好的,我们只有两段)
$(“p”)。每个(功能){
var$this,text;
//我们将不止一次在'this'上使用jQuery,
//所以抓住包装纸
$this=$(this);
//获取段落的文本
//请注意,这会去掉HTML标记,这是一个
//现实世界的解决方案可能需要循环
//通过文本节点而不是行为
//在全文中一下子
text=$this.text();
//做替换
//这些字符类只使用主字符
//阿拉伯语范围为U+0600至U+06FF,您可以
//需要添加其他。
text=text.replace(
/([\u0600-\u06ff]+)([^\u0600-\u06ff]+)?/g,
替代品);
//更新该段
$this.html(文本);
});
//我们的替代者。我们单独定义它,而不是
//内联,因为我们多次使用它
功能替换器(m、c0、c1){
//这个词在我们的关键词地图上吗?
if(关键字[c0]){
//是的,把它包起来
c0='';
}
返回c0+c1;
}
})();
小提琴示例:
实际来源
我只是想匹配关键字,并将它们包装在HTML中,HTML可以是
或,但阿拉伯语也会中断,因为其中一位用户建议使用Highlight插件作为解决方案,但正如上周提出的这个问题所述,它会中断
我对我采取的方法还有其他问题
如果阿拉伯语单词被包装在“
中,或者被,
分隔,或者如果我从正则表达式中删除\s
,最后一个单词有时不匹配,那么它可以正常工作
可能还有其他的情况,它可能会破裂,到目前为止,我已经试图解决一个问题,但后来其他东西破裂了
在这方面,我非常感谢您的帮助,我只想使用任何正常工作的插件来匹配准确的阿拉伯语关键词,到目前为止,我尝试了几个选项,但它们有其他问题之一。您的方法的问题不在于正则表达式。您单独匹配每个单词,然后检查该单词是否为关键词。如果de>关键字
包含一些与之不匹配的单词
一个选项是根据关键字
更改正则表达式模式
例如:
var keywords = [ "الخليج العربي","الاتفاق النووي","الخليج العربي",
"وإيران","والتفاوض","وأمريكا","اوباما",
"الولايات المتحدة الأمريكية","الولايات المتحدة"];
var keywordRegexp = new RegExp(keywords.join("|"), 'g');
然后:
text = text.replace(keywordRegexp, '<a class="red" href="#">$&</a>');
工作示例:我尝试突出显示插件,但问题是它匹配任何组合,我也发布了关于这一点的问题。如果我添加带有
的关键字,则它会断开,通常与最后一个不匹配word@KnowledgeSeeker-您能否编辑问题以包括所有这些情况?
function replacer(g0) {
return '<a class="red" href="#">' + g0 + '</a>';
}
text = text.replace(keywordRegexp, replacer);
$("p").highlight(keywords);