1

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

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

结果:东西

4

5 回答 5

4

您可以使用正则表达式完成所有操作:

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

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

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

如果您需要查找所有这样的子字符串(即所有出现的“!”后跟一些非空白字符),那么事情会变得更复杂一些。就个人而言,我会利用 JavaScript 允许将函数作为.replace(). 当您这样做时,匹配的组将作为参数传递给函数:

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

之后,数组“集合”将包含所有匹配项。正则表达式上的后缀“g”会导致匹配反复进行,直到在字符串中不再找到它,每次从上一次匹配后开始。

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

于 2012-10-24T16:22:24.413 回答
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));

​

I'm actually assuming you already have a particular start index that you care about. If that's not the case, then a regex makes more sense:

var s = "hi this is a string with some !things in it";
var afterbang = s.match(/!.+?\s+/);
alert(afterbang)
​
于 2012-10-24T16:23:28.913 回答
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('!');
}

编辑:现在我知道你想要什么了。这只会让您在感叹号之后立即获得所有单词。

于 2012-10-24T16:26:41.627 回答
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
于 2012-10-24T16:30:15.330 回答
0

您也可以简单地使用它 -

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

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

于 2021-03-26T06:09:58.010 回答