用jQuery选择字符串中的第一个单词

时间:2014-08-25 07:43:40

标签: javascript jquery regex

我想在带有jQuery的字符串中的第一个单词之后添加span类。我使用以下代码:

$('h1').each(function(){
    var test = $(this);
    test.html( test.text().replace(/(^\w+)/,'<span>$1</span>') );
});

这适用于标准字符,但不适用于非英文字符

请看演示,它应该选择整个单词“Bài”,但它只选择“B”。如何解决这个问题?

演示: http://jsfiddle.net/hez4ohpc/

感谢。

4 个答案:

答案 0 :(得分:6)

目前,JavaScript正则表达式中对Unicode的支持非常差(this will be much better in ES6)。在这种情况下,您最好的选择可能是使用更完整的正则表达式解决方案。我所知道的最好的是XRegExp库。

第二个最佳选择是尝试定义不会创造一个词的内容:

.replace(/([^\s\.,\:;!?]+)/,'<span>$1</span>')

但那很危险,以后当你意识到忘记了什么时,你会让你惊喜。

答案 1 :(得分:2)

试试这个:

$('h1').each(function(){
    var test = $(this);
    test.html( test.text().replace(/(^[^\s]+ )/,'<span>$1</span>') );
});

答案 2 :(得分:2)

也许那个?

$('h1').each(function(){
    var test = $(this);
    test.html( test.text().replace(/(^[^\s,\.\:\;\"]+)/,'<span>$1</span>') );
});

答案 3 :(得分:-2)

以下是您问题的另一种解决方案,您无需逃避或替换任何内容。

$('h1').each(function() {
   var html = $(this).html();
   var word = html .substr(0, html.indexOf(" "));
   var rest = html .substr(html.indexOf(" "));
   $(this).html(rest).prepend($("<span/>").html(word).addClass("em"));
});

JSFiddle

编辑: 正如评论中所讨论的,此解决方案的缺点是,无法正常工作如果 第一个字 没有跟踪 空格