我正在研究javascript搜索功能。 RegExp
'\\b('+word+')\\b', 'ig'
用于选择和获取位置设置字词,但它只选择英文字符,不选择土耳其字符或任何内容。
答案 0 :(得分:4)
您需要将RegExp与u
标记一起使用,但javascript不支持unicode正则表达式:(因此要解决此问题,您应该重新定义\b
。\ba
表示[^\w]a
所以对土耳其人来说;
[^\wığüşöçĞÜŞÖÇİ]
是关键。
[^\wığüşöçĞÜŞÖÇİ](türkçe)[^\wığüşöçĞÜŞÖÇİ]
可以使用,但这次它在下方找不到任何türkçe
。
türkçe dili destekliyorum
要解决该问题,您可以添加^
和$
..
(?:^|[^\wığüşöçĞÜŞÖÇİ])(türkçe)(?:[^\wığüşöçĞÜŞÖÇİ]|$)
多数民众赞成......
注意:此正则表达式将匹配上一个字符和下一个字符。所以你需要再次放置它们。
(^|[^\wığüşöçĞÜŞÖÇİ])(türkçe)([^\wığüşöçĞÜŞÖÇİ]|$)
并替换为$1<span class="match">$2</span>$3
。注意:你可以使用后面的观察并向前看但不幸的是javascript不支持后面的看法
var word = 'İpsum';
var rgx = new RegExp('(^|[^\wığüşöçĞÜŞÖÇİ])(' + word + ')([^\wığüşöçĞÜŞÖÇİ]|$)', 'ig');
$('p, p *').contents().filter(function() {
return this.nodeType === 3;
}).each(function() {
$(this).replaceWith($(this).text().replace(rgx, "$1<span class='match'>$2</span>$3"));
});
var positions = $('.match').map(function() {
return this.getBoundingClientRect().top;
}).get();
div {
font-size: 50px;
}
span.match {
background: gold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<p>Lorem İpsum dolor sit amet, consectetur adipisicing elit. Aut voluptatum, provident saepe. Culpa animi sint, itaque iure error hic qui blanditiis perspiciatis adipisci, libero quia veritatis dignissimos quasi id cumque!</p>
</body>
注意:您无法使用此搜索特殊字符(例如
[hi] spe.cial characters
)。您必须使用this
答案 1 :(得分:1)
Javascript中的正则表达式不支持开箱即用的Unicode,这对于您使用的土耳其语字符是必需的(尽管ES6 may change this)。
此外,非ASCII字符通常不支持边界规则(例如您在表达式中使用的\b
标记),因此也可能归因于此问题。如果删除边界标记,则使用RegexPal的以下示例似乎按预期工作:
您可能会使用XRegExp之类的插件来为处理Unicode字符添加一些支持。
更好的选择仍然可能是UnicodeJS库,它似乎添加了这个缺少的功能,可能值得尝试。