(我知道我的问题令人困惑,因此请参阅以下示例/说明)

我试图在一个大的正则表达式中匹配一堆东西,然后找出我匹配的子表达式。问题是当我的一个子表达式中有一个“集合/序列”时,就抛出了子表达式的索引。

例如,在下面的表达式中,对“ foo”的检查将在索引3处:

/(one)|(two)|(foo)/g


但是在此示例中,它位于索引4(是的,这是一个愚蠢的正则表达式,但该示例很合适):

/(one)|(([tT][wW])?o)|(foo)/g


如果使用下面的代码尝试查找“ foo”,则会得到类似以下内容:

var str = "Some string that only matches foo";

while ( match = reg.exec( str ) )
{
    for ( var i = 1; i < match.length; i++ )
    {
        //Should be 3 but it's not
        if( match[ i ] !== undefined ) break;
    }

    //This won't match foo, because it's now the wrong index
    alert( match[ i ] );
}


如何在子表达式括号内执行“一个或多个”类型表达式,而又不影响通过“ regex.exec”返回到“ match”的索引?

(注意:如果有任何不清楚的地方,请立即告诉我,我将尝试提供更好的示例和完整的示例代码)

最佳答案

(pattern)匹配并捕获匹配。如果要匹配而不是捕获,请使用(?:pattern)

关于javascript - 如何在不增加子表达式数量的情况下匹配子表达式内某事的n +个实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6919507/

10-12 00:01
查看更多