2012-09-04 53 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

相关问题