这个解决下一个空白的最佳方法是什么?
var string = 'hi this is a string with some !things in it"
var index = string.indexOf('!')
var afterbang = string.substring(index, [NEXT SPACE])
结果:事情
答案 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 之前拼接整个文本, 然后使用拆分,您找到下一个空间并获取第一个索引。 你会得到你想要的词。