我试图在textarea中捕获用户输入,这可能是三种格式中的任何一种网址(以及类似的电子邮件) -
[text](url "title")
[text](url)
现在,我为自己工作的三种单独格式中的每一种都有一个正则表达式(javascript)。但是如果我想做所有3,第一个阻止第二个和第三个激活。在我的代码中,在'space'上,触发了正则表达式检测。因此,如果我有第一个正则表达式,则永远不会触发具有降价标题的正则表达式。
我想知道是否有可能为第一个有特殊排除第二和第三格式的正则表达式?或者,更好的是,如果有一个正则表达式用于捕获匹配所有3?
另外,由于我对Regex并不擅长,如果有人也可以解释他们的解决方案Regex,我会很高兴,所以我可以尝试为电子邮件检测做同样的事情。
谢谢!
答案 0 :(得分:0)
首先,第二个正则表达式already works for the third format,所以我们只需要加入第一个和第二个正则表达式。
这样做的简单方法是使用|
(“OR”)字符,如下所示:
(<firstRegex>)|(<secondRegex>)
问题在于它使捕获组混乱。如果正则表达式捕获第一个模式,则url将位于不同的捕获组(我的演示中为第4个),而不是第二个(第2组)捕获的。
将(?:^|[^\(\/])
添加到普通URL模式的开头将强制正则表达式匹配任何不是左括号的字符,从而排除降价情况。必须使用捕获组提取URL,因为此字符将包含在匹配中。