试图编写一个匹配以下所有输入的正则表达式
www.abc.com
www.abc.com/xyz_first
www.abc.com/xyz_second
www.abc.com/xyz_third
www-test.abc.com
www-test.abc.com/xyz_first
www-test.abc.com/xyz_second
www-test.abc.com/xyz_third
域名是www.abc.com。我在这里有以下内容,但它对我不起作用。我需要匹配以上输入
var exp = /.*/xyz_first || xyz_second || xyz_third || /.*/;
您可以尝试以下regex,
www.?-?(w+)*.abc.com
工作演示
试试这个:www(.|-)\w*.\w*.com([/]\w*)?
我假设您实际寻找的部分只是特定值的开关,因为您显示的开关的语法非常不正确。
你可以这样做:
//(xyz_first|xyz_second|xyz_third)/
我认为您试图将||用作"或",但正则表达式不是这样工作的。您使用单个管道|
作为OR,但它是作用域的全局OR,因此您需要使用括号来确定作用域,除非您指的是这个或其他所有内容。
我希望这能有所帮助。
试试这个:/^www(?:-test)?.abc.com(?:/(?:xyz_first|xyz_second|xyz_third))?$/
var inputs = [
'www.abc.com',
'www.abc.com/xyz_first',
'www.abc.com/xyz_second',
'www.abc.com/xyz_third',
'www-test.abc.com',
'www-test.abc.com/xyz_first',
'www-test.abc.com/xyz_second',
'www-test.abc.com/xyz_third'
];
var regex = /^www(?:-test)?.abc.com(?:/(?:xyz_first|xyz_second|xyz_third))?$/;
for ( var i = 0; i < inputs.length; i++ )
{
console.log( inputs[i], regex.test( inputs[i] ) );
}
给定您的原始正则表达式,看起来您希望匹配上面列出的任何正则表达式,只要它们包含xyz_
,后跟单词之一:first
、second
或third
(但根据您对@MT0的注释,而不是fourth
等)。
正则表达式.*/(xyz_first|xyz_second|xyz_third)(/.*)?
将匹配任何域(abc.com
以及www-test.abc.com
或example.com
)。但是它允许/
及其之后的所有内容都是可选的。
你可以在这里看到这一点。
这意味着你得到:
www.abc.com (no match)
www.abc.com/xyz_first (match)
www.abc.com/xyz_second (match)
www.abc.com/xyz_third (match)
www.abc.com/xyz_fourth (match)
www-test.abc.com (no match)
www-test.abc.com/xyz_first (match)
www-test.abc.com/xyz_second (match)
www-test.abc.com/xyz_third (match)
www-test.abc.com/xyz_fourth (match)
如果这不是你想要的,一定要更新你最初的问题,以尽可能具体地反映你想要(和不想要)匹配的内容。