我正在研究一种用于研究古老拉丁语的html工具。
有一项练习,学生必须点击一些单词,
其中有div
一张拉丁语:
<div class="clickable">
Cum a Romanis copiis vincĭtur măr, Gallia terra fera est.
Regionis incŏlae terram non colunt, autem sagittis feras necant et postea eas vorant.
Etiam a_femĭnis vita agrestis agĭtur,
miseras vestes induunt et cum familiā in parvis casis vivunt.
Vita secūra nimiaeque divitiae a Gallis contemnuntur.
Gallorum civitates acrĭter pugnant et ab inimicis copiis timentur.
Galli densis silvis defenduntur, tamen Roma feram Galliam capit.
</div>
在我的javascript中,我使用正则表达式将所有单个单词包装到<span>
中,然后我应用了一些操作。
var words = $('div.clickable');
words.html(function(index, oldHtml) {
var myText = oldHtml.replace(/\b(\w+?)\b/g, '<span class="word">$1</span>')
return myText;
}).click(function(event) {
if(!$(event.target).hasClass("word"))return;
alert($(event.target).text());
}
问题是包含ĭ, ŏ, ā
的单词没有正确包装,而是按这些字符对应分割。
我如何正确匹配这类词?
答案 0 :(得分:4)
您可以通过分隔符拆分文本。在一般情况下,它可能是空格或不同的标点符号:
(.+?)([\s,.!?;:)([\]]+)
https://regex101.com/r/xW4pF1/5
修改强>
var words = $('div.clickable');
words.html(function(index, oldHtml) {
var myText = oldHtml.replace(/(.+?)([\s,.!?;:)([\]]+)/g, '<span class="word">$1</span>$2')
return myText;
}).click(function(event) {
if(!$(event.target).hasClass("word"))return;
alert($(event.target).text());
}
答案 1 :(得分:1)
\w
元字符用于查找来自a-z
,A-Z
,0-9
的字词,包括_
(下划线)字符。
因此,您需要更改正则表达式以使用Unicode符号范围而不是\w
。
您还可以尝试\p{L}
而不是\w
来匹配任何Unicode字符。