如何创建正则表达式从URL中提取主题ID?

时间:2012-12-08 08:37:38

标签: javascript jquery regex

我的页面上有文字url字段。用户可以输入任何值,例如:

如何验证是否提供了正确的域名(example.com),然后提取主题ID(557761)?

看起来我应该首先使用jQuery.isNumeric(以捕获最后一种情况),如果它不是数字,那么我可以提取像/^.*t=(\d+)$/这样的值。但是我应该如何检查正则表达式中的域名?

4 个答案:

答案 0 :(得分:1)

这适用于所有情况,除了您说已经有解决方案的最后一个案例。

var pattern = "^(?:http(?:s)?://)?(?:www\.)?example\.com/forum/viewtopic\.php\?t=(\d+)";
var regex = new RegExp(pattern, "i");
var match = regex.exec(string);
if (match) {
    alert(match[1]);
}

如果您不介意不太可读的正则表达式模式,那么以下内容将用于捕获您的所有案例(包括最后一个案例)。只需将上面代码中的pattern行替换为下面的代码即可。

var pattern = "(?:(?:^(?:http(?:s)?://)?(?:www\.)?example\.com/forum/viewtopic\.php\?t=(\d+))|(^\d+$))";

答案 1 :(得分:0)

这应该做的工作:

var domain = "example.com"
var regex = "http://(www)?"+domain+"/.+?t=([0-9]+)";
var match = regex.exec(inputString);
var topicId = match[1];

答案 2 :(得分:0)

您可以使用<a>元素来利用浏览器的网址解析器:

var myhost = "example.com";

// Here url is the data given in the text input field
var hostname = $('<a>').prop('href', url).prop('hostname');
if (myhost == hostname) {
    alert('Host matched!');
}​

答案 3 :(得分:0)

(?<=example\.com/forum/viewtopic.php\?t=)\d+(?=\&)

http://regexr.com?33333

这应该适合你。