正则表达式,用于从拉丁语中分割带有重音字符的单词

时间:2016-04-04 06:56:01

标签: javascript html regex

我正在研究一种用于研究古老拉丁语的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());
    }

问题是包含ĭ, ŏ, ā的单词没有正确包装,而是按这些字符对应分割。

我如何正确匹配这类词?

JS Fiddle

2 个答案:

答案 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());
}

https://jsfiddle.net/s568c0pp/3/

答案 1 :(得分:1)

\w元字符用于查找来自a-zA-Z0-9的字词,包括_(下划线)字符。 因此,您需要更改正则表达式以使用Unicode符号范围而不是\w

您还可以尝试\p{L}而不是\w来匹配任何Unicode字符。

另请参阅:http://www.regular-expressions.info/unicode.html