下面的代码:编写一个单词后,它会将其存储为自己的数组,这意味着每个单词都是自己的数组,然后检查是否再次出现。
我想要的是:而不是创建一个单词数组(在按下空格键之后),我希望它在写完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;
};
答案 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");
但是,由于模式是静态的,因此不使用任何变量来构建模式,因此可以使用正则表达式文字表示法,如答案顶部所示。