2012-10-24 27 views

回答

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); 
}); 

在那之後,陣「集合」將包含所有的比賽。正則表達式的後綴「g」會導致匹配一遍又一遍地重複進行,直到不再在字符串中找到匹配項,每次在上一次匹配之後開始。

(該函數有一個虛擬的第一個參數,名爲「_」,它只是一個佔位符,函數的第一個參數始終是整個正則表達式的匹配,第二個和後續參數來自括號組因此,在這種情況下,第一個參數是字符串包括感嘆號,第二個參數是剛子沒有它。)

+0

這看起來不錯,你介意把它分解一點,所以我可以在這個例子之外應用它嗎? – boom

+0

@boom完成 - 我鼓勵你看看正則表達式的介紹和教程。這是JavaScript和許多其他編程環境中非常強大的機制。 – Pointy

+0

感謝,接受時限到了 – boom

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) 
​ 
+0

啊,我明白了,謝謝! – boom

+0

啊這個工程很好,一旦我添加全球'/!。+?\ s +/g'我怎麼會做空白或字符串與該正則表達式儘管呢? – boom

+0

我也想修剪開始'#'和結尾'''' - 只是學習正則表達式 – boom

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('!'); 
} 

編輯:現在我知道你想要什麼。這會在感嘆號後立即讓你聽到所有的單詞。

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 
相關問題