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

Javascript 使用jQuery选择字符串中的第一个单词,javascript,jquery,regex,Javascript,Jquery,Regex,我想用jQuery在字符串的第一个单词后面添加一个span类。我正在使用以下代码: $('h1').each(function(){ var test = $(this); test.html( test.text().replace(/(^\w+)/,'<span>$1</span>') ); }); $('h1')。每个(函数(){ var测试=$(此); html(test.text().replace(/(^\w+/,“$1”); }); 这可

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

$('h1').each(function(){
    var test = $(this);
    test.html( test.text().replace(/(^\w+)/,'<span>$1</span>') );
});
$('h1')。每个(函数(){
var测试=$(此);
html(test.text().replace(/(^\w+/,“$1”);
});
这可以很好地处理标准字符,但不能处理非英语字符

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

演示:

谢谢。

试试这个:

$('h1').each(function(){
    var test = $(this);
    test.html( test.text().replace(/(^[^\s]+ )/,'<span>$1</span>') );
});
$('h1')。每个(函数(){
var测试=$(此);
html(test.text().replace(/(^[^\s]+)/,“$1”);
});

JavaScript正则表达式中对Unicode的支持目前非常差()。在这种情况下,最好的选择可能是使用更完整的正则表达式解决方案。我所知道的最好的是图书馆

第二个最好的选择是尝试定义什么不是单词:

.replace(/([^\s\.,\:;!?]+)/,'<span>$1</span>')
.replace(/([^\s\,\:;!?]+)/,“$1”)
但这是危险的,当你意识到你忘记了什么角色时,你会感到惊讶。

也许是这样

$('h1').each(function(){
    var test = $(this);
    test.html( test.text().replace(/(^[^\s,\.\:\;\"]+)/,'<span>$1</span>') );
});
$('h1')。每个(函数(){
var测试=$(此);
html(test.text().replace(/(^[^\s,\.\:\;\“]+)/,“$1”);
});

这里有一个解决您问题的替代方案,您无需逃避或替换任何内容

$('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"));
});
$('h1')。每个(函数(){
var html=$(this.html();
var word=html.substr(0,html.indexOf(“”);
var rest=html.substr(html.indexOf(“”);
$(this.html(rest).prepend($(“”).html(word.addClass(“em”));
});


编辑:如评论中所述,此解决方案的缺点是,如果第一个单词后面没有空格
将匹配任何类型的字符,包括空格,那么将不起作用,是吗?您确定吗st word后面跟空格?@Krzysiek,正如OP在他的例子中所写的,是的。他可以从错误中学习;)我认为这是最好的方法。或者使用PHP,在哪里更好地支持unicode…为什么要关注字符?看我的答案,认为这是最好的选择case@FelixLahmer看起来你不明白其他的答案,甚至不明白为什么P使用了
\w
,这是当你的正则表达式引擎不太差时的最佳实践。这假设第一个单词以空格结尾。为什么你建议用这样一个冗长的代码替换快速简洁的正则表达式?@dystroy,一个单词怎么可能不以空格结尾?你最后一条评论的最后一个单词后面是什么?哼?@dystroy我的解决方案假设,至少有一个单词后跟一个空格,适用于OP的所有给定场景。在使用正则表达式之前,我会针对特定的情况(特殊字符)这样做。@dystroy,如果OP的非空格标题有很多?!“§$%&/(),那么,他可以随意发表评论,我将为他的案例重写我的片段。但考虑到他的例子,我的解决方案似乎比所有这些更简单、更可靠。替换那些你可以忘记很多字符的东西,特别是如果你使用非英语字符,比如OP