获取字符串的第一个单词

87

好的,这是我的代码,附带我尝试做过的详细说明:

var str = "Hello m|sss sss|mmm ss";
//Now I separate them by "|"
var str1 = str.split("|");

//Now I want to get the first word of every split-ed sting parts:

for (var i = 0; i < codelines.length; i++) {
  //What to do here to get the first word of every spilt
}

那我在那里应该做什么?:\

我想得到的是:

  • firstword[0] 将会给出 "Hello"

  • firstword[1] 将会给出 "sss"

  • firstword[2] 将会给出 "mmm"
12个回答

98

使用正则表达式

var totalWords = "foo love bar very much.";

var firstWord = totalWords.replace(/ .*/,'');

$('body').append(firstWord);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


4
没想到!它基本上是通过空字符串替换第一个空格后面的所有内容。由于其简单性,我更喜欢这种解决方案。 - CPHPython
@BimalGrg,你能解释一下这个RegExp吗?如果我只想取空格后的第一个单词和第二个字符,像这样“Bimal G”? - DevAS
@DevAS 我不知道你问题中的正则表达式,但是还有其他简单的方法可以实现,比如 JavaScript 的 split 方法。 - Bimal Grg
我指的是这个 / .*/ @BimalGrg - DevAS
这意味着在第一个空格出现后,将给定字符串的所有单词替换为空格。 - Bimal Grg
这实际上不适用于换行符 \n。 - Sergio Rey

73

再次通过空格分割:

var firstWords = [];
for (var i=0;i<codelines.length;i++)
{
  var words = codelines[i].split(" ");
  firstWords.push(words[0]);
}

或者使用 String.prototype.substr()(可能更快):

var firstWords = [];
for (var i=0;i<codelines.length;i++)
{
  var codeLine = codelines[i];
  var firstWord = codeLine.substr(0, codeLine.indexOf(" "));
  firstWords.push(firstWord);
}

@SasukeKun 在 for 循环后的 firstWords 中忘记了一个 s:http://jsbin.com/umeqi4/19/ - ComFreek
3
好的,看起来 String.prototype.substr() 稍微快一些:http://jsperf.com/get-first-word-of-string - Benj
8
'hello'.split(' ')[0] === 'hello' 的意思是将字符串 "hello" 以空格为分隔符进行切分,取出第一个元素,并与字符串 "hello" 进行比较。由于 "hello" 不含有空格,因此该表达式的值为真。'hello'.substr(...) 的意思是截取字符串 "hello" 的一部分。由于省略号表示省略了必要参数,无法确定具体截取哪一部分,因此无法准确翻译。 - Michael Cole
substr方法已被弃用,您可以使用substring方法代替,但对于仅包含单词的字符串(无法通过indexOf查找)它会失败。 - Luckylooke
split 对于长字符串的处理速度较慢,因为它需要迭代整个字符串直到找到所有空格字符的出现位置。 - Luckylooke

39

获取字符串的第一个单词,可以这样做:

let myStr = "Hello World"
let firstWord = myStr.split(" ")[0]
console.log(firstWord)

split(" ")将把你的字符串转换成由单词组成的数组(通过空格作为分隔符而得到的子字符串),然后你可以通过访问第一个数组元素[0]来获取第一个单词。
有关更多信息,请参见split方法

19

我正在使用这个:

function getFirstWord(str) {
        let spaceIndex = str.indexOf(' ');
        return spaceIndex === -1 ? str : str.substring(0, spaceIndex);
    };

1
请使用 substring 方法更新您的答案,因为 substr 已被弃用 substr 文档 ;) - Luckylooke

7
使用underscorejs怎么样?
str = "There are so many places on earth that I want to go, i just dont have time. :("
firstWord = _.first( str.split(" ") )

4

对之前的回答进行了改进(适用于多行或制表符字符串):

String.prototype.firstWord = function(){return this.replace(/\s.*/,'')}

或者使用searchsubstr

String.prototype.firstWord = function(){let sp=this.search(/\s/);return sp<0?this:this.substr(0,sp)}

或者 不使用 正则表达式:

String.prototype.firstWord = function(){
  let sps=[this.indexOf(' '),this.indexOf('\u000A'),this.indexOf('\u0009')].
   filter((e)=>e!==-1);
  return sps.length? this.substr(0,Math.min(...sps)) : this;
}

示例:

String.prototype.firstWord = function(){return this.replace(/\s.*/,'')}
console.log(`linebreak
example 1`.firstWord()); // -> linebreak
console.log('space example 2'.firstWord()); // -> singleline
console.log('tab example 3'.firstWord()); // -> tab


3
var str = "Hello m|sss sss|mmm ss"
//Now i separate them by "|"
var str1 = str.split('|');

//Now i want to get the first word of every split-ed sting parts:

for (var i=0;i<str1.length;i++)
{
    //What to do here to get the first word :)
    var firstWord = str1[i].split(' ')[0];
    alert(firstWord);
}

2

这段代码可以获取第一个单词:

var str = "Hello m|sss sss|mmm ss"
//Now i separate them by "|"
var str1 = str.split('|');

 //Now i want to get the first word of every split-ed sting parts:

 for (var i=0;i<str1.length;i++)
 {
     //What to do here to get the first word :(
     var words = str1[i].split(" ");
     console.log(words[0]);
 }

2
在现代的 JavaScript 中,这变得更加简化,你可以像这样编写代码:

const firstWords = str =>
  str .split (/\|/) .map (s => s .split (/\s+/) [0])

const str = "Hello m|sss sss|mmm ss"

console .log (firstWords (str))

我们首先在|处将字符串分割,然后在生成的数组中将每个字符串按任何空格进行分割,仅保留第一个字符串。

2
我很惊讶这种方法还没有被提到:"Some string".split(' ').shift()
直接回答问题:
let firstWords = []
let str = "Hello m|sss sss|mmm ss";
const codeLines = str.split("|");

for (var i = 0; i < codeLines.length; i++) {
  const first = codeLines[i].split(' ').shift()
  firstWords.push(first)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接