正则表达式匹配abc.com& abc.com/.*

时间:2015-03-30 21:57:47

标签: javascript regex

尝试编写匹配以下所有输入的正则表达式

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 ||  \/.*/;

5 个答案:

答案 0 :(得分:0)

试试这个:/^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] ) );
}

答案 1 :(得分:0)

您可以尝试使用正则表达式,

www.?-?(\w+)*.abc.com

Working Demo

答案 2 :(得分:0)

试试这个:www(。| - )\ w *。\ w * .com([/] \ w *)?

答案 3 :(得分:0)

我认为您实际需要的部分只是特定值的切换,因为您显示的开关具有非常不正确的语法。

你可以这样做:

/\/(xyz_first|xyz_second|xyz_third)/

我认为您正在尝试使用||作为'或',但这不是正则表达式的工作方式。您使用单个管道|作为OR,但它是范围的OR全局,因此您需要使用括号范围,除非您指的是此或其他所有内容。

我希望有所帮助。

答案 4 :(得分:0)

鉴于您的原始正则表达式,看起来您希望匹配上面列出的任何内容,只要它们包含xyz_后跟其中一个词:firstsecondthird(但根据您对@ MT0的评论,而不是fourth等)。

正则表达式.*\/(xyz_first|xyz_second|xyz_third)(\/.*)?将匹配任何域(abc.com以及www-test.abc.comexample.com)。但它允许/及其后的所有内容都是可选的。

您可以在行动here中看到这一点。

这意味着你得到:

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)

如果这不符合您的意图,请务必更新原始问题,以反映您希望(并且不想要)尽可能具体匹配的内容。