用两个词而不是一个词对数组进行分组

时间:2019-06-08 20:04:36

标签: javascript regex

下面的代码:编写一个单词后,它会将其存储为自己的数组,这意味着每个单词都是自己的数组,然后检查是否再次出现。

我想要的是:而不是创建一个单词数组(在按下空格键之后),我希望它在写完2个单词之后执行。

IE:而不是我写“ Hello” +空格键,以及将“ hello”创建为数组的代码。我希望它等到我写了“ hello my” +空格键,然后用这两个数字创建一个数组。

我猜想这与正则表达式有关? 我已经尝试了许多不同的东西(有点新手),但我不明白如何将2个单词组合在一起而不是一个单词。

  const count = (text) => {

    const wordRegex = new RegExp(`([\\p{Alphabetic}\]+)`, 'gu');
    let result;
    const words = {};
    while ((result = wordRegex.exec(text)) !== null) {
      const word = result[0].toLowerCase();
      if (!words[word]) {
        words[word] = [];
      }
      words[word].push(result.index);
      words[word].push(result.index + word.length);
    }
    return words;
  };

1 个答案:

答案 0 :(得分:1)

您可以使用

const wordRegex = /\p{Alphabetic}+(?:\s+\p{Alphabetic}+)?/gu;

详细信息

  • \p{Alphabetic}+-1个以上字母字符
  • (?:\s+\p{Alphabetic}+)?-可选序列:
    • \s+-超过1个空格
    • \p{Alphabetic}+-1个以上字母字符

第二个单词可选地匹配,这样最后一个奇数单词也可以匹配。

请参见下面的JS演示:

 const count = (text) => {

    const wordRegex = /\p{Alphabetic}+(?:\s+\p{Alphabetic}+)?/gu;
    let result;
    const words = {};
    while ((result = wordRegex.exec(text)) !== null) {
      const word = result[0].toLowerCase();
      if (!words[word]) {
        words[word] = [];
      }
      words[word].push(result.index);
      words[word].push(result.index + word.length);
    }
    return words;
  };
  
  console.log(count("abc def ghi"))

定义此正则表达式的RegExp构造方法是

const wordRegex = new RegExp("\\p{Alphabetic}+(?:\\s+\\p{Alphabetic}+)?", "gu");

但是,由于模式是静态的,因此不使用任何变量来构建模式,因此可以使用正则表达式文字表示法,如答案顶部所示。