【问题标题】:Regular expression to split words with accented characters from latin正则表达式从拉丁语中分割带有重音字符的单词
【发布时间】:2016-04-04 06:56:00
【问题描述】:

我正在开发一个 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 中,我使用正则表达式将所有单个单词包装成 &lt;span&gt;,然后应用一些操作。

 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

【问题讨论】:

标签: javascript html regex


【解决方案1】:

您可以通过分隔符拆分文本。通常情况下可能是空格或不同的标点符号:

(.+?)([\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/

【讨论】:

  • 这种方法效果很好,但也匹配分隔符,如何从结果中排除标点?
  • 匹配 2 组:单词和分隔符。因此,在您的替换功能中同时使用:oldHtml.replace(/(.+?)([\s\,\.\!\?]+)/g, '&lt;span class="word"&gt;$1&lt;/span&gt;$2')jsfiddle.net/s568c0pp/2
【解决方案2】:

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

您也可以尝试用\p{L} 代替\w 来匹配任何Unicode 字符。

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

【讨论】:

  • 我试过 /\b(\p{L}+?)\b/g 但不匹配任何单词。
  • 抱歉,JavaScript 正则表达式引擎有点不同。给我几分钟...我会检查替代方案。
猜你喜欢
  • 1970-01-01
  • 2013-01-27
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 2018-06-21
  • 2018-10-13
  • 2015-02-21
相关资源
最近更新 更多