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/