我想在章节中听到。由于unicode字符(şöüİıçğ)问题,我不想使用单词边界。所以我使用这样的正则表达式。我收到一个错误无效的组。有人可以提供帮助吗?
var paragraphy= "Bu örnek bir metindir <span>bu</span> metin; test amaçlı yazılmıştır.";
var word="metin;";
var regex = new RegExp("([\\s>]|^)("+word+")(?=([\\.\\,\\;\\?\\!](?=[\\s<])|(?<![\\.\\,\\;\\?\\!])[<\\s]|$))", "gi");
console.log(paragraphy.match(regex));
我想要这个结果:[“metin”]
答案 0 :(得分:1)
您可以在单词之前使用([\\s>]|^)
组简化边界检查,并在(?=[.,;?!\\s<])
之后查找。此外,由于您使用的是全局标志,并且您定义了捕获组,并且需要在匹配后访问一个,因此最好在循环内使用RegExp#exec()
。
此外,如果你之后有一些标点符号(在搜索词内),你应该首先摆脱它。如果它只出现在单词末尾的,请使用word = word.replace(/[,.;?!<]+$/, '')
进行预处理。
var paragraphy = "Bu örnek bir metindir <span>bu</span> metin; test amaçlı yazılmıştır.";
var word="metin;";
var regex = new RegExp("([\\s>]|^)("+word.replace(/[,.;?!<]+$/, '')+")(?=[.,;?!\\s<])", "gi");
res = paragraphy.replace(regex, '$1<span>metin</span>');
document.body.innerHTML = "<pre>" + res + "</pre>";
span {
color: #FF0000;
}
答案 1 :(得分:1)
根据上面的讨论(您的问题下方),您可以使用此replace
:
var word = "metin";
var re = new RegExp("(^|[\\s>])(" + word + ")[.,;?!]?(?=[\\s<]|$)", "gi");
var str = 'Bu örnek bir metindir <span>bu</span> metin; test amaçlı yazılmıştır';
var result = str.replace(re, '$1<span>$2</span>');
alert(result);
//=> Bu örnek bir metindir <span>bu</span> <span>metin</span> test amaçlı yazılmıştır