解決這個下一個空白的最好方法是什麼?從索引到下一個空白隔離字符串的一部分?
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」是相反的)。非空白匹配是加括號的,以便正則表達式匹配過程收集匹配的那部分。最後,.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));
實際上,我假設你已經有了一個特定的開始你關心的索引。如果不是的話,那麼正則表達式更有意義:
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
這看起來不錯,你介意把它分解一點,所以我可以在這個例子之外應用它嗎? – boom
@boom完成 - 我鼓勵你看看正則表達式的介紹和教程。這是JavaScript和許多其他編程環境中非常強大的機制。 – Pointy
感謝,接受時限到了 – boom