使用正则表达式查找重复项,这实际上如何工作?

时间:2016-06-30 15:31:56

标签: javascript regex duplicates

作为一名JavaScript初学者,我正在阅读Jeremy McPeak撰写的Beginning Javascript(第5版),我看到了一些关于正则表达式的东西,我无法理解。这是代码:

var myString = "This sentence has has a fault and and we need to fix it."
var myRegExp = /(\b\w+\b) \1/g;
myString = myString.replace(myRegExp,"$1");
document.write(myString); /* this was added by myself to see the result in browser */

有没有人可以解释为什么myRegExp变量完全针对myString变量中的重复单词而不是其他单词?因为从我可以阅读的内容来看,这将是我对正则表达式变量myRegExp的解释,一点一点地分解:

/  /* begin regular expression*/
(  /* start grouping pattern*/
\b /* beginning boundary character*/
\w /* any characters of a-z and 0-9 */
+  /* one or more instances of the previous characters, in this case \w. whether it has one "a" character or 5 characters like "apple" or even more characters */
/b /* ending boundary character*/
)  /* end grouping pattern */
\1 /* group 1 of regular expression */
/  /* end regular expression */
g  /* global search for the regular expression */

所以翻译的正则表达式说:找到以边界字符(单词的开头)开头的任何字符串模式,其中包含一个或多个字符(未知限制),以字符结尾(字的结尾)和空格结尾。

\1/g之前还有一个空格,这显然是代码工作所必需的,但为什么呢? myRegExp变量如何也不会定位myString变量中的其他单词,除了重复单词,因为w+部分会定位任何包含1个或多个字符a-z和/或0-9的单词?为什么用+替换*会删除单词之间的所有空格?

另外,我应该如何阅读"$1"部分?将找到的正则表达式替换为组1并将其放在末尾?这个命令不会没用,因为你会用自己替换找到的模式吗?我对这一切感到非常困惑。

如果有人能用一个例子向我解释这一点,我会非常感激!

0 个答案:

没有答案