JavaScript:RegEx-不返回match1 match2等

JavaScript: RegEx - Do not return match1 match2 etc

本文关键字:match1 match2 返回 RegEx- JavaScript      更新时间:2023-09-26

我正试图采用这个正则表达式来满足我的需求:

(?:^|'s)(?:https?:'/'/)?(?:'w+(?='.).)?(?<name>.*).(?<tld>(?<='.)'w+)

演示:https://regex101.com/r/lI2lB4/2

我想为所有条目返回一个匹配项,如:

  • www.example.com
  • example.com
  • http://example.com
  • http://www.example.com

但不适用于

  • 例如
  • http://www.example
  • www.example

现在,上面显示的regex工作正常,但它返回不同的匹配项(Match 1、Match 2…),但只希望得到一个结果:Matchingnot matching

因此,我想使用

regExDomain.test($regExDomain.test(input.val()))
{
console.log('valid');
}
else
{
console.log('invalid');
}

问题是:上面的regEx似乎总是返回"有效"。

有什么办法吗?

Regex类的test()函数应该足以验证输入是否与模式匹配。

你可以这样做:

var pattern = /^(http[s]?:'/'/)?(www'.)?([^'.]+)'.[^'.]{2,3}$/
var regex = new RegExp(pattern);
for(var i=1; i<=3; i++) {
    if ( regex.test( $("#text"+i).text() ) )
      $("#isMatch"+i).html("MATCHES");
  else
    $("#isMatch"+i).html("DOESN'T MATCH");
}

jsfiddle示例:http://jsfiddle.net/jyu16m89/1/

对于扩展域(例如".digital"或".menu"),上述示例将返回false。如果您想将其包含在模式中,请将{2,3}替换为+

如果您想在模式中包括子域/文件夹(例如,对于http://stackoverflow.com/questions/等条目返回true),请删除美元符号(这并不限制字符串到此为止)。

您有一个分组的正则表达式,因此它将返回match[n],其中n是匹配的组数。如果没有匹配,那么结果将为空:

function isUrl(myString) {
  var match = myString.match('/(?:^|'s)(?:https?:'/'/)?(?:'w+(?='.).)?(?<name>.*).(?<tld>(?<='.)'w+)/');
  if(match !== null) {
    return true;
  }
  return false;
}