【发布时间】:2021-03-13 10:30:02
【问题描述】:
我对 javascript 中的正则表达式有疑问。
我想检测一个字符串是否有一个包含重复字符或单词的子字符串。
例如,字符串“aaaaabcd”具有a或aa的重复子串
但字符串“abcdefghij”没有任何重复子字符串。
我在 javascript 中做了一个 RegExp 来检测它。
const written_contents = "aaaaaabcd"
const re = new RegExp("(\w+)\1{3,}", "g")
if (re.test(written_contents) ) {
return "repetition detected."
}
我的意图是检测 3 个以上的相同单词或字符重复。
让我解释一下我达到那个正则表达式的逻辑
如果字符串是“aaaaaabc”,
\w+ 将捕获由 1+ 个字符组成的任何子集,例如 a、aa、aaa、b、c、aaab、aabc、aaabc。
(\w+)\1 \1 指向第一个括号。这里是 (\w)
而 {3, } 表示 \1 重复超过 3 次。
我给了“g”选项来搜索整个字符串。
现在我希望“aaaaa”被捕获,因为第一个 a 是 \w,第二个 a 是 \1,第三个 a 到第五个 a 是 {3,} 因此“aaaaa”匹配。
但是代码不起作用。
怎么了?
【问题讨论】:
-
你必须在正则表达式构造函数
(\\w+)\\1{3,}中对反斜杠进行双重转义,你可以写成const re = /(\w+)\1{3,}/g; -
我不完全明白,为什么
\w+,如果你只想重复一个字符,而不是一个序列,但除此之外:why-do-regex-constructors-need-to-be-double-escaped -
感谢“第四只鸟”。我决定不使用 RegExp。 //更直接
-
感谢 ASDFGerte。你的评论是对的。我把它改成 (.+)
-
谢谢沙丁鱼。我采纳了你的建议,它成功了。
标签: javascript regex