2012-09-04 84 views
0

我需要想出一些正則表達式或javascript,將標題中所示爲從每X個連續單詞中獲得1個隨機單詞。正則表達式或javascript每連續X個單詞中的1個單詞

爲例如我有這樣一段文字

的「在計算中,正則表達式提供一個簡明的和靈活的方法,以‘匹配’(指定和識別)文字的字符串,如特定字符,單詞,或字符模式「正則表達式」的常用縮寫包括正則表達式和正則表達式。「

我想正則表達式1個字,每4個字,以便從文本中的第四個字「在計算,一個普通的」我的正則表達式了1個隨機字如計算

的需要爲做到這一點全文不過如此,例如在上面就有9組4個字。我想從每個組中隨機抽出一個單詞。希望我可以在那個正則表達式中做一個快速編輯,所以它也可以爲X字組做同樣的事情。 X是任意數字。

我已經嘗試了所有到得到的東西,能爲我做這一點,但我沒有收到得很好(我是新來的兩個正則表達式和JavaScript)

我想如果我可以使用JavaScript來分割將文本分成X組,然後我可以嘗試從每組中隨機獲得一個單詞。

我到目前爲止是這樣的:

var split='In computing, a regular expression provides a concise and flexible means to "match" (specify and recognize) strings of text, such as particular characters, words, or patterns of characters. Common abbreviations for "regular expression" include regex and regexp.'.match(/[^ ]+(+[^ ]+){0,3}/g); 

這與拆分逗號分隔成4個字(或每3個空格)組的文本。問題是,該分隔符是逗號,所以任何逗號在原文中也看到在輸出e.g

In computing, a regular,expression provides a concise,and flexible means to,"match" (specify and recognize),strings of text, such,as particular characters, words,,or patterns of characters.,Common abbreviations for "regular,expression" include regex and,regexp. 

反正是有改變這種分離到的東西,除了一個逗號?至少這樣我就可以嘗試提出一些可用於每個4個詞組的正則表達式。我想可能在比賽結束後替換逗號,但當然也會替換所有原始逗號。

我不知道我將如何做隨機詞正則表達式或JavaScript,但有整理出的組我認爲是正確的方向的第一步?

感謝您的任何幫助或建議,我真的很感激。很抱歉,如果這對你們中的一些人來說是完全直截了當的,但我是新的,我現在已經嘗試了幾個小時,想出一些可行的解決方案,但無濟於事。

彼得

+0

爲什麼你必須使用正則表達式?正則表達式沒有「隨機」運算符(我知道!),所以不適合這個任務。 –

+0

我不需要。 JavaScript將爲所有這一切做好。在我能夠首先獲得分組的單詞後,我將不得不查看該部分。今天我一直在玩這麼多的代碼,試圖讓某些事情做到這一點,但正則表達式和JavaScript的這種弱知識已經阻止了我。通常持久的混亂與來自全網的代碼示例讓我得到我需要做的,但這讓我難住:) –

回答

1

.match將返回匹配的數組。然後,只是空間割裂開來,並得到一個隨機從每個數組:

var text = '"In computing, a regular expression provides a concise and flexible means to "match" (specify and recognize) strings of text, such as particular characters, words, or patterns of characters. Common abbreviations for "regular expression" include regex and regexp."'; 
var groups = text.match(/[^ ]+(+[^ ]+){0,3}/g); 
for(var i=0 ; i<groups.length ; i++) { 
    var words = groups[i].split(' '); 
    console.log(words[~~(Math.random()*words.length)]); 
} 

-

~~(Math.random()*words.length)會給你一個整數0單詞的#(4) - 1.

1

定期表達式不支持隨機化,所以他們不會在這裏幫助你。

但是,您可以使用String.split方法將文本轉換爲單個單詞的數組。然後,以四個組爲單位迭代數組,並從每個組中選擇一個隨機單詞。

Math.floor(Math.random() * 4) 

返回0和3之間的隨機整數

1

http://jsfiddle.net/DqsQu/

var str = "In computing, a regular expression provides a concise and flexible means to \"match\" (specify and recognize) strings of text, such as particular characters, words, or patterns of characters. Common abbreviations for \"regular expression\" include regex and regexp."; 

var words = str.match(/\w+/g); 
for (var i=0; i< words.length; i+=4) {  
    var randNum = Math.floor(Math.random()*4) + i; 
    if (words[randNum]){ 
     document.write(words[randNum] + "<br>"); 
    } 
} 
​ 

編輯:

如果你想確保單詞的最後一個 「組」 始終有一個值,那麼你可以這樣做:

var words = str.match(/\w+/g); 
for (var i=0; i< words.length; i+=4) { 
    var maxRand = Math.min(4, words.length - i); 
    var randNum = Math.floor(Math.random()*maxRand) + i; 
    document.write(words[randNum] + "<br>"); 
} 
​ 

所以,如果你有「一二三四五六」這個短語,第一個單詞將是前四個單詞中的一個隨機單詞,第二個單詞只包含單詞「五」和「六」,所以你會得到來自這兩個詞之一的隨機單詞。

+0

您的解決方案完美無瑕,但不幸的是它在我使用它的程序內部不起作用。我認爲文檔.write導致問題。是否有任何直接的方式,沒有它將文本分解成由a分隔的組;例如。正則表達式解決方案可能會運行良好。然後,我將嘗試分別處理每個正則表達式匹配,並從每個匹配中獲取一個隨機詞。再次感謝 –

+0

在循環之外創建一個變量:var randomWords =「」;然後, 而不是document.write do: 'randomWords + = words [randNum]「」;' – aquinas

+0

不工作恐怕'var str =「這是一個我想要使用的示例文本字符串」; var words = str.match(/ \ w +/g); var randomWords =「」; (var i = 0; i

相關問題