0

我需要想出一些正则表达式或 javascript,正如标题所说,从每 X 个连续单词中获取 1 个随机单词。

例如,我有这段文字

“在计算中,正则表达式提供了一种简洁灵活的方法来“匹配”(指定和识别)文本字符串,例如特定的字符、单词或字符模式。“正则表达式”的常见缩写包括 regex 和 regexp。 "

我想每 4 个单词正则表达式 1 个单词,所以从“在计算中,一个常规”文本中的前四个单词中,我将正则表达式出 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 个空格)的组。问题是分隔符是逗号,因此原始文本中的任何逗号也会在输出中看到,例如

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,但我认为将组整理好是朝着正确方向迈出的第一步?

感谢您对此的任何帮助或建议,我非常感谢。抱歉,如果这对你们中的某些人来说完全简单,但我是新手,我已经尝试了几个小时来提出一些可行的解决方案,但无济于事。

彼得

4

3 回答 3

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到# of words (4) - 1。

于 2012-09-04T15:08:30.053 回答
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>");
}
​

所以,如果你有短语“一二三四五六”,第一个词将是前四个词中的一个随机词,第二组只包含词“五”和“六”,所以你会得到一个随机来自这两个词之一的词。

于 2012-09-04T15:17:46.193 回答
1

正则表达式不支持随机化,所以在这里它们不会帮助你。

但是您可以使用 String.split 方法将文本转换为单个单词的数组。然后,您以四个为一组对数组进行迭代,并从每组中选择一个随机单词。

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

返回 0 到 3 之间的随机整数。

于 2012-09-04T15:12:07.820 回答