我有RegExp
:
/.?(NCAA|Division|I|Basketball|Champions,|1939-2011).?/gi
和一些文字"Champion"
不知何故,这是一场比赛,我疯了吗?
0: "pio"
1: "i"
index: 4
input: "Champion"
length: 2
循环在这里:
// contruct the pattern, dynamically
var someText = "Champion";
var phrase = ".?(NCAA|Division|I|Basketball|Champions,|1939-2011).?";
var pat = new RegExp(phrase, "gi"); // <- ends up being
var result;
while( result = pat.exec(someText) ) {
// do stuff!
}
我的RegExp有问题,对吧?
编辑:
.?
这件事只是一个快速而肮脏的尝试,表示我希望将这些单词中的一个和/或其中一个单词与任一方的单个字符匹配。例如:
\sNCAA\s
NCAA
NCAA\s
\sNCAA
目标:
我试图根据一些搜索词做一些简单的点击突出显示。我有一个功能可以获取页面上的所有文本节点,我想全部浏览它们并突出显示我phrase
变量中任何一个术语的匹配项。< / p>
我认为我只需要重新构建我的RegExp。
答案 0 :(得分:2)
将start(^
)和end($
)锚点添加到正则表达式。
/^.?(NCAA|Division|I|Basketball|Champions,|1939-2011).?$/gi
没有锚点,正则表达式的匹配可以在字符串中的任何地方开始和结束,这就是为什么
/.?(NCAA|Division|I|Basketball|Champions,|1939-2011).?/gi.exec('Champion')
可以匹配pio
和i
:因为实际匹配(不区分大小写的)I
。如果您关闭锚点但删除...|I|...
,则正则表达式将与'Champion'
不匹配:
> /.?(NCAA|Division|Basketball|Champions,|1939-2011).?/gi.exec('Champion')
null
答案 1 :(得分:2)
好吧,首先你要指定不区分大小写,其次,你将字母I
作为匹配字符串之一。
Champion
会匹配pio
和i
,因为它们都匹配/.?I.?/gi
但由于尾随逗号,它与/.?Champions,.?/gi
不匹配。
答案 2 :(得分:1)
Champion
匹配/.?I.?/i
。
您自己的输出表明它与子串“pio”匹配。
也许您打算将表达式绑定到输入的开头和结尾,分别使用^
和$
:
/^.?(NCAA|Division|I|Basketball|Champions,|1939-2011).?$/gi
我知道你说要忽略.?
,但我不能:它很可能是错的,而且很可能会继续引起你的问题。解释他们为什么在那里,我们可以告诉你如何正确地做到这一点。 :)