解决下一个空格的最佳方法是什么?
var string = 'hi this is a string with some !things in it"
var index = string.indexOf('!')
var afterbang = string.substring(index, [NEXT SPACE])
结果:东西
解决下一个空格的最佳方法是什么?
var string = 'hi this is a string with some !things in it"
var index = string.indexOf('!')
var afterbang = string.substring(index, [NEXT SPACE])
结果:东西
您可以使用正则表达式完成所有操作:
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”会导致匹配反复进行,直到在字符串中不再找到它,每次从上一次匹配后开始。
(该函数有一个虚拟的第一个参数,称为“_”,它只是一个占位符。函数的第一个参数始终是整个正则表达式的整个匹配项。第二个和后续参数来自带括号的组。因此,在在这种情况下,第一个参数将是包含感叹号的字符串,第二个参数只是没有它的子字符串。)
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)
我不确定你的意思,但是,如果你的意思只是一遍又一遍地得到这个:
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('!');
}
编辑:现在我知道你想要什么了。这只会让您在感叹号之后立即获得所有单词。
尝试这个;
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
您也可以简单地使用它 -
allText.slice(startIndex).trim().split(' ')[0]
这将在您的 startIndex 之前拼接整个文本,然后使用拆分,您找到下一个空格并获取第一个索引。你会得到你预期的结果。