Regex搜索Telefon但跳过URL

Regex搜索Telefon但跳过URL,regex,regexp-replace,Regex,Regexp Replace,我有一个正则表达式,它可以完美地处理我想要得到的数字,但问题是URL也能得到它们,我怎么才能删除它们呢 如果没有空格、换行符等,是否跳过 谢谢 我现在的正则表达式是: /(((?(0{1,2}}|+)\d{1,2})?)(([-]*\d+{8,20})+/gm 我所做的修改不起作用: /\s{1}(((?(0{1,2}}+)\d{1,2}))?(([-]*\d+{8,20})+\s{0,1}/gm 测试文本: https://asd.com/20441235534-aaaaaaaaaaa-

我有一个正则表达式,它可以完美地处理我想要得到的数字,但问题是URL也能得到它们,我怎么才能删除它们呢

如果没有空格、换行符等,是否跳过

谢谢

我现在的正则表达式是:

/(((?(0{1,2}}|+)\d{1,2})?)(([-]*\d+{8,20})+/gm

我所做的修改不起作用:

/\s{1}(((?(0{1,2}}+)\d{1,2}))?(([-]*\d+{8,20})+\s{0,1}/gm

测试文本:

https://asd.com/20441235534-aaaaaaaaaaa-

202460676

aasdasd 202460676

https://asd.com/20441235534


202460676-



10 text
1234 text
text 123

00491234567890
+491234567890

0123-4567890

0123 4567 789
0123 456 7890
0123 45 67 789

+490123 4567 789
+490123 456 7890
+49 123 45 67 789

123 4567 789
123 456 7890
123 45 67 789


+49 1234567890
+491234567890

0049 1234567890
0049 1234 567 890

(0049)1234567890
(+49)1234567890

(0049) 1234567890
(+49) 1234567890



text text (0049) 1234567890 text text
text text (+49) 1234567890 text text

使电话号码具有链接“tel:”以便能够单击它们

你不应该选择URL作为电话

JS代码(带jquery):

函数searchAndReplacePhones(){

var regex=/(\(?(0{1,2}}\+)\d{1,2}\)?(([-]*\d+{8,20})+/gm;
//贝施雷邦
$(“.my_text”).html($(.my_text”).html().replace(regex,”);
}
显示
(*SKIP)(*F)
技巧的使用,将
https?:\/\/\S*(*SKIP)(*F)
添加到表达式中:

https?:\/\/\S*(*SKIP)(*F)|(\(?(0{1,2}|\+)\d{1,2}\)?)?(([ -]*\d+){8,20})+


使用
https?:\/\/\S*(*SKIP)(*F)
,您可以跳过URL,在其他任何地方进行匹配。

您可以使用与URL匹配的正则表达式(例如,使用
https?:/\S*
)或匹配并捕获电话号码:

var regex = /https?:\/\/\S*|((?:\(?(?:0{1,2}|\+)\d{1,2}\)?[ -]*)?\d(?:[ -]*\d){7,19})/gi;
然后,当您在
.replace
方法中使用它时,需要使用回调方法,在该方法中传递正则表达式匹配并分析匹配的结构:如果组1匹配,则替换它,否则,放回匹配值

请参阅下面的示例和JS演示:

var text="\n\nhttps://asd.com/20441235534-aaaaaaaaaaa-\n\n202460676\n\naasdasd 202460676\n\nhttps://asd.com/20441235534\n\n\n202460676-\n\n\n10 text\n1234 text\ntext 123\n\n00491234567890\n+491234567890\n\n\n0123-4567890\n\n0123 456789\n0123 4567890\n0123 456789\n\n+490123 456789\n+490123 4567890\n+491234567897890\n123 45 67 789\n\n\n+49 1234567890\n+491234567890\n\n0049 1234567890\n0049 1234567890\n\n(0049)1234567890\n(+49)1234567890\n\n(0049)1234567890\n(+49)1234567890\n\n\n\n\n文本(0049)1234567890文本\n文本(0049)1234567890文本;
var regex=/https?:\/\/\S*|((?:\(?:+)\d{1,2}\)?[-]*)?\d(?:[-]*\d){7,19})/gi;
//https://regex101.com/r/0LxWTv/5
document.body.innerHTML=”“+text.replace(正则表达式,函数($0,$1){
返回$1?“”:$0;

})+“”;
你的正则表达式是什么味道?正则表达式替换(\(?(0{1,2}\+)\d{1,2}\)?([-]*\d+{8,20})暗示了Oracle,但你可能已经使用了它,因为你计划在某些替换方法中使用正则表达式。哪一个?我使用JS和Jquery替换我也相信你原来的正则表达式,
(\(?(0{1,2}\+)\d{1,2}\)?([-]*\d+{8,20})+
,有点不对劲,你想匹配包含8到20位数字的电话号码,对吗?你用
+
量化了
\d
,现在你匹配了8到20个1+数字块,用空格或连字符分隔,这可能太多了。你到底在做什么?用一些标签包装这些号码?这会使电话号码具有link“tel:”可以点击他们,但不应该把URL当作电话。我刚刚编辑了这篇文章。谢谢!你说得对,我用的是我的旧代码,它工作得很好,非常感谢!!
var regex = /https?:\/\/\S*|((?:\(?(?:0{1,2}|\+)\d{1,2}\)?[ -]*)?\d(?:[ -]*\d){7,19})/gi;