var a="how are you?";


在上面的示例中,我想一步将第二个单词“ are”存储到另一个变量中。
我不想使用以下内容

var bigArray = a.split(" ");
var secondText = bigArray[1];


因为我们可能需要将整个段落存储到一个大数组中,并且在没有任何使用的情况下消耗大量内存。

我想知道是否有一些功能如下

var secondText=specialFunction(a," ",1);


这样当段落被“”分隔时,我们将获得第二个子字符串

最佳答案

好吧,我会花时间担心比数组大小还要重要的事情。

无论如何,您可以尝试使用regexp:

var secondText = (a.match(/ (\w+)/) || []) [1];


读为“找到一个空格,然后捕获下一个单词”。

|| []部分用于处理不匹配(例如,没有第二个单词)的情况。在这种情况下,结果将是[][1],即undefined

这只会找到第二个单词。那更一般的情况呢?由于我们不允许在空格上分割字符串,因为那样会创建一个数组,并且由于内存问题,OP并不想这样做。因此,我们将建立一个动态的正则表达式。要找到第n个单词,我们想跳过前n-1个空格。或者,更准确地说,我们想跳过第一个单词,一些空格,然后跳过第二个单词,再跳过更多空格,等等。因此regexp是

/(?:\w+ ){n}(\w+)/
  ^^                  NO CAPTURING GROUP
    ^^^^              WORD FOLLOWED BY SPACE
         ^^^          N TIMES
            ^^^^^     CAPTURE FOLLOWING WORD


?:是为了避免将其视为捕获组。我们使用构建正则表达式

function make_nth_word_regexp(n) {
    n--;
    return new RegExp("(?:\\w+ ){" + n + "}(\\w+)");
}


现在寻找第n个字:

var fifth_word = str.match(make_nth_word_regexp(5)) [1];

> "Hey there you".match(make_nth_word_regexp(3))[1]
< "you"

关于javascript - 如何仅将第n个子字符串存储到Javascript中的变量中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30998348/

10-10 00:11