JSFiddle - React, Tailwind, and code Playground
HTML
<div id="showParensLink"></div>
<div id="showNoParensLink"></div>
<div id="parensLinkRegex"><p>Parens Link Regex Result</p></div>
<div id="noParensLinkRegex"><p>No Parens Link Regex Result</p></div>
CSS
div{
padding:10px;
margin:10px 5px;
color:#0000FF;
}
#showParensLink{
color:#585858;
border:1px solid #DF7401;
}
#showNoParensLink{
color:#424242;
border:1px solid #ff0000;
}
.result{
color:#ff0000;
font-weight:bold;
}
JavaScript
$(document).ready(function(){
var parensLink = "(https://qabuild.bountyjobs.com/posting/viewPhoneConferenceSchedule.do?dispatch=viewSchedule&scheduleId=79)";
var noParensLink = "https://qabuild.bountyjobs.com/posting/viewPhoneConferenceSchedule.do?dispatch=viewSchedule&scheduleId=99";
var parensPattern = /\b(http|https?):\/\/\b/;
//regex: replace any parens with ""
var result1 = parensPattern.test(parensLink);
var result2 = parensPattern.test(noParensLink);
$("#showParensLink").text(parensLink);
$("#showNoParensLink").text(noParensLink);
$("#parensLinkRegex").append('<span class="result">'+result1+'</span>');
$("#noParensLinkRegex").append('<span class="result">'+result2+'</span>');
});
/*
\b
# Match the leading part (proto://hostname, or just hostname)
(
# ftp://, http://, or https:// leading part
(ftp|https?)://[-\w]+(\.\w[-\w]*)+
|
# or, try to find a hostname with our more specific sub-expression
(?i: [a-z0-9] (?:[-a-z0-9]*[a-z0-9])? \. )+ # sub domains
# Now ending .com, etc. For these, require lowercase
(?-i: com\b
| edu\b
| biz\b
| gov\b
| in(?:t|fo)\b # .int or .info
| mil\b
| net\b
| org\b
| name\b
| coop\b
| aero\b
| museum\b
| [a-z][a-z]\b # two-letter country codes
)
)
# Allow an optional port number
( : \d+ )?
# The rest of the URL is optional, and begins with / . . .
(
/
# The rest are heuristics for what seems to work well
[^.!,?;"'<>()\[\]{}\s\x7F-\xFF]*
(?:
[.!,?]+ [^.!,?;"'<>()\[\]{}\s\x7F-\xFF]+
)*
)?
*/