将字符串的一部分从索引隔离到下一个空格?

时间:2012-10-24 16:19:33

标签: javascript string

这个解决下一个空白的最佳方法是什么?

var string = 'hi this is a string with some !things in it"
var index = string.indexOf('!')
var afterbang = string.substring(index, [NEXT SPACE])

结果:事情

5 个答案:

答案 0 :(得分:4)

你可以用正则表达式完成整个事情:

var afterbang = string.replace(/.*!(\S*).*/, "$1");

它的作用是匹配一个惊叹号,后跟一些非空格(这是\S的意思 - \s与小写的“s”匹配空格,大写“s”正好相反。非空白匹配括起来,以便正则表达式匹配过程收集匹配的那部分。最后,.replace()的第二个参数表示应该返回第一个匹配的组,即第一个感叹号之后的非空白字符集合。

编辑 - 抱歉错误 - 现在修复了。我输入的原始代码也会留给你所有其余的字符串,只删除感叹号:-)我已经更新它以包含前导和尾随.*表达式,以确保我们摆脱一切其他

如果你需要找到所有这些子串(即所有出现的“!”后跟一些非空格字符),那么事情会变得复杂一些。就个人而言,我会利用JavaScript允许函数作为.replace()的第二个参数传递的事实。执行此操作时,匹配的组将作为参数传递给函数:

var collection = [];
string.replace(/!(\S*)/g, function(_, bangWord) {
  collection.push(bangWord);
});

之后,数组“collection”将包含所有匹配项。正则表达式上的后缀“g”会导致匹配一次又一次地完成,直到在字符串中找不到它,每次在上一次匹配后开始。

(该函数有一个虚拟的第一个参数,称为“_”,它只是一个占位符。函数的第一个参数始终是整个正则表达式的整个匹配。第二个和后续参数来自括号组。因此,在这种情况下,第一个参数将是字符串包括感叹号,第二个参数只是没有它的子字符串。)

答案 1 :(得分:3)

var s = "hi this is a string with some !things in it";
var index = s.indexOf('!')
var afterbang = s.substring(index, s.indexOf(' ', index));

​

我实际上假设你已经拥有了一个你关心的特定起始索引。如果情况并非如此,那么正则表达式更有意义:

var s = "hi this is a string with some !things in it";
var afterbang = s.match(/!.+?\s+/);
alert(afterbang)
​

答案 2 :(得分:0)

我不确定你的意思,但是,如果你的意思是一遍又一遍地说:

var substrings = [];
    string = SOME STRING HERE,
    index = string.indexOf('!'),
    nextWhiteIndex,
    stringToBePushed;

while (index !== -1) {

    stringToBePush = string.slice(index + 1);
    if (stringToBePush.indexOf(' ') !== -1) {
        nextWhiteIndex = stringToBePushed.indexOf(' ');
        substrings.push(stringToBePushed.substring(0, nextWhiteIndex + 1);
    } else if (stringToBePushed !== '') {
        substrings.push(stringToBePushed.substring(0);
    }

    index = string.indexOf('!');
}
编辑:现在我知道你想要什么。这只会在感叹号后立即为您提供所有单词。

答案 3 :(得分:0)

试试这个;

var s = "hi this is a string with some !things in it";
var re = /(.*)!([^ ]*)/; // regex capturing two groups split over '!'
var m = re.exec(s); 
WScript.Echo(m[2]);      // take second match

或没有正则表达式;

var a = s.split('!');    // split in half
var b = a[1].split(' '); // split in half again, taking second half
WScript.Echo(b[0]);      // show first half

答案 4 :(得分:0)

你也可以简单地使用这个 -

allText.slice(startIndex).trim().split(' ')[0]

这将在您的 startIndex 之前拼接整个文本, 然后使用拆分,您找到下一个空间并获取第一个索引。 你会得到你想要的词。

相关问题