Javascript正则表达式量词问题

Javascript正则表达式量词问题,javascript,regex,Javascript,Regex,我有一些运行的JavaScript使用替换正则表达式来修改页面上的内容。不过,我对一个特定的正则表达式量词有问题。我读过的所有文档(我知道它在其他语言的regex中也能工作)都说JavaScript支持{N},{N,}和{N,N}量词。也就是说,您可以指定所需的特定匹配数或匹配范围。例如,(zz){5,}匹配一行中至少10个z,并且z{5,10}将匹配从5到10的任意数量的z,不多也不少 问题是,我可以匹配一个精确的数字(例如,z{5}),但不能匹配一个范围。我能想到的最近的一点是,它与正则表达

我有一些运行的JavaScript使用替换正则表达式来修改页面上的内容。不过,我对一个特定的正则表达式量词有问题。我读过的所有文档(我知道它在其他语言的regex中也能工作)都说JavaScript支持
{N}
{N,}
{N,N}
量词。也就是说,您可以指定所需的特定匹配数或匹配范围。例如,
(zz){5,}
匹配一行中至少10个z,并且
z{5,10}
将匹配从5到10的任意数量的z,不多也不少

问题是,我可以匹配一个精确的数字(例如,
z{5}
),但不能匹配一个范围。我能想到的最近的一点是,它与正则表达式字符串中的逗号有关,但我不明白为什么,也无法回避这个问题。我尝试过转义逗号,甚至使用unicode十六进制字符串作为逗号(
\u002C
),但都没有用


为了澄清任何可能的误解,并解决评论中提出的一些问题,这里有一些额外的信息(也可以在评论中找到):我尝试用所有可能的方式创建数组,包括
var=[/z{5,}/gi,/a{4,5}/gi]
var=[newregexp('z{5,}','gi'),newregexp('a{4,5}','gi')
,以及
var[0]=newregexp('z{5,}'),'gi')
var[1]=/z{5,}/gi,等等。数组在for循环中用作
somevar.replace(regex[i],subst[i])

也许我误解了这个问题,但{n}运算符的Javascript实现似乎相当不错:

"foobar".match(/o{2,4}/); // => matches 'oo'
"fooobar".match(/o{2,4}/); // => matches 'ooo'
"foooobar".match(/o{2,4}/); // => matches 'oooo'
"fooooooobar".match(/o{2,4}/); // => matches 'oooo'
"fooooooobar".match(/o{2,4}?/); // => lazy, matches 'oo'
"foooobar".match(/(oo){2}/); // => matches 'oooo', and captures 'oo'
"fobar".match(/[^o](o{2,3})[^o]/); // => no match
"foobar".match(/[^o](o{2,3})[^o]/); // => matches 'foob' and captures 'oo'
"fooobar".match(/[^o](o{2,3})[^o]/); // => matches 'fooob' and captures 'oo'
"foooobar".match(/[^o](o{2,3})[^o]/); // => no match

也许我误解了这个问题,但{n}操作符的Javascript实现似乎相当不错:

"foobar".match(/o{2,4}/); // => matches 'oo'
"fooobar".match(/o{2,4}/); // => matches 'ooo'
"foooobar".match(/o{2,4}/); // => matches 'oooo'
"fooooooobar".match(/o{2,4}/); // => matches 'oooo'
"fooooooobar".match(/o{2,4}?/); // => lazy, matches 'oo'
"foooobar".match(/(oo){2}/); // => matches 'oooo', and captures 'oo'
"fobar".match(/[^o](o{2,3})[^o]/); // => no match
"foobar".match(/[^o](o{2,3})[^o]/); // => matches 'foob' and captures 'oo'
"fooobar".match(/[^o](o{2,3})[^o]/); // => matches 'fooob' and captures 'oo'
"foooobar".match(/[^o](o{2,3})[^o]/); // => no match
它对我有用

var regex = [/z{5,}/gi,/a{4,5}/gi];
var subst = ['ZZZZZ','AAAAA'];
var somevar = 'zzzzz aaaaa aaaaaaa zzzzzzzzzz aaazzzaaaaaa';
print(somevar);
for (var i=0; i<2; i++) {
    somevar = somevar.replace(regex[i], subst[i]);
}
print(somevar);
构造函数版本也可以工作:

var regex = [new RegExp('z{5,}','gi'),new RegExp('a{4,5}','gi')];

这对我很有效

var regex = [/z{5,}/gi,/a{4,5}/gi];
var subst = ['ZZZZZ','AAAAA'];
var somevar = 'zzzzz aaaaa aaaaaaa zzzzzzzzzz aaazzzaaaaaa';
print(somevar);
for (var i=0; i<2; i++) {
    somevar = somevar.replace(regex[i], subst[i]);
}
print(somevar);
构造函数版本也可以工作:

var regex = [new RegExp('z{5,}','gi'),new RegExp('a{4,5}','gi')];


我想我已经明白了。我以各种方式构建数组以使其工作,但我认为不同之处在于在正则表达式字符串周围使用单引号,而不是像
[/z{5,}/,/t{7,9}/gi]
那样将其打开。所以当我做
['/z{5,}/'/t{7,9}/gi']
的时候,似乎已经解决了这个问题。尽管如此,就像艾伦的例子一样,没有它们有时也能很好地工作。我想我的情况不是这样。

我想我已经弄明白了。我以各种方式构建数组以使其工作,但我认为不同之处在于在正则表达式字符串周围使用单引号,而不是像
[/z{5,}/,/t{7,9}/gi]
那样将其打开。所以当我做
['/z{5,}/'/t{7,9}/gi']
的时候,似乎已经解决了这个问题。尽管如此,就像艾伦的例子一样,没有它们有时也能很好地工作。我想不是这样。

可能想发布您正在使用的JS代码,因为JS正则表达式中支持范围量词。发布示例代码,告诉我们您在哪个浏览器和版本中尝试过它。因此,我有一个数组,其值为“/z{5,}/gi”,我的脚本用于循环数组内容并执行“var.replace”(regex[i],other[i]);“没有{N,}或{N,N}的值工作得很好。您能提供更多的代码示例吗?很高兴看到您是如何构建数组的--
[/z{5,}/,/a{4,5}/]
vs
[new RegExp('z{5,}'),new RegExp('a{4,5}])]
etc.可能想发布您正在使用的JS代码,因为JS正则表达式中支持范围量词。发布示例代码并告诉我们您在哪个浏览器和版本中尝试过它。因此,我有一个数组,其值为“/z{5,}/gi”,我的脚本用于循环数组的内容,并执行“var.replace(regex[I],other[I]”“没有{N,}或{N,N}的值可以很好地工作。您能提供更多的代码示例吗?最好看看您是如何构建数组的--
[/z{5,}/,/a{4,5}/]
vs
[new RegExp('z{5,}')、new RegExp('a{4,5}')]]
等等。不幸的是,这个答案与我的问题无关,因为我的问题是专门提出来的“为什么这个功能在我的情况下不起作用?”--如果问题是“这个功能起作用吗?”或者“JS支持这种类型的正则表达式吗?”我很抱歉,当问到一个没有具体实现细节的问题时,我想这一定是关于一个功能的。当你说
我读过的所有文档时(我知道它在其他语言的正则表达式中也能工作)说JavaScript支持{N}、{N,}和{N,N}量词。
然后你似乎在质疑JavaScript支持本身。好吧,我说希望指出一个事实,我没有质疑它在JS中是否得到支持,我想这会适得其反因为我们不知道你的情况是什么,我认为你永远不会得到满意的答案。提供一些代码,提供你尝试过的所有代码,很可能有人会看到你错过的东西。目前,最好的答案是,“该功能受支持,所以你一定做错了什么。”"。如果您完整阅读了问题,包括问题后面的评论,所有内容都会得到解释。如果您对该问题有不理解的地方,请询问,我可以澄清。我已经提供了与此问题相关的所有信息。同样,如果您对所提供的任何信息理解有困难,请just ask。发布诸如“你一定做错了什么”之类的评论是毫无意义的,因为这一事实已经确立(以及该功能得到支持的事实)。不幸的是,这个答案与我的问题无关,因为我的问题特别是“为什么该功能在我的情况下不起作用?”--如果问题是“这行得通吗?”或“JS支持这种类型的正则表达式吗?”这将是一个很好的答案。很抱歉,如果问题没有具体的实现细节,那么我假设它一定是关于某个特性的。