Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式可以同时选择和忽略匹配项吗?_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式可以同时选择和忽略匹配项吗?

Javascript 正则表达式可以同时选择和忽略匹配项吗?,javascript,regex,Javascript,Regex,我有一个正则表达式3来检测大文本中的电话,然后出于隐私原因用“(phone)”替换 var phoneNumber = /\(?(?:[0-9]{2,4})\)?[- . ]{0,}?(?:[0-9]{2,4})[- . ]{0,}?(?:[0-9]{2,4})/gim; var separatePhone = /(\d\s){8,}\d/gim; var textPhone = /((one|two|three|four|five|six|seven|eight|nine|zero|\d)

我有一个正则表达式3来检测大文本中的电话,然后出于隐私原因用“(phone)”替换

var phoneNumber = /\(?(?:[0-9]{2,4})\)?[- . ]{0,}?(?:[0-9]{2,4})[- . ]{0,}?(?:[0-9]{2,4})/gim;

var separatePhone = /(\d\s){8,}\d/gim;

var textPhone = /((one|two|three|four|five|six|seven|eight|nine|zero|\d)\s){8,}(one|two|three|four|five|six|seven|eight|nine|zero|\d)/gim;
然后我检查我的文本是否与每个文本匹配

示例:

我需要10万欧元,请致电123456789与我谈谈。

嗨,你能花500.000美元买这个项目(链接)吗?给我打电话+01123456789

您好,您能以100000000英镑的价格购买此商品(链接)吗?拨打100000000给我打电话

本文中的问题是,
100000€
被检测为手机

我想将电话号码与€、$或€((%在号码的开头)匹配,我已经有了这个
(?![\€\$\)\(?(?:[0-9]{2,4}))
,而且我已经尝试了:

(?![\€\$\£]\(?(?:[0-9]{2,4}))(?=\(?(?:[0-9]{2,4})\)?[- . ]{0,}?(?:[0-9]{2,4})[- . ]{0,}?(?:[0-9]{2,4}))
但它不起作用

我把这个正则表达式签入

更新:

我将使用这个表达式(项目中的原始表达式)标记解决方案,我将正则表达式检查为数组

/[^$€£0-9]((?:[0-9]{2,4})\)?[- . ]{0,}?(?:[0-9]{2,4})[- . ]{0,}?(?:[0-9]{2,4})+)/gim;

为什么不像那样简单

[^$€£0-9]([\d]+)[\s|.]

请参阅。

一般来说,您可以使用以下机制:

(?: everything you do not want) | (important stuff)
然后通过编程检查组1是否已设置,例如,对于您给出的示例:

(?:\$[\d.]+|\d+€)|(\d+)
如果遇到其他货币,请更改非捕获组中的左分支,并根据需要添加其他货币。请参阅。
JavaScript

let data=`我需要10万欧元,请致电123456789与我讨论此事。
您好,您能用500.000美元购买此商品(链接)吗?请致电+01123456789`;
设rx=/(?:\$[\d.]+\d+€)(\d+)/g;
匹配=rx.exec(数据);
while(匹配!=null){
if(typeof(匹配[1])!=“未定义”)
console.log(匹配[1]);
匹配=rx.exec(数据);

}
请提供更多示例。请尝试最简单的方法,检查最后一个字符:str.slice(-1)!=$..@Jan我再加一个,你也可以试着用同样的号码,比如
500000和$500000
还有@Shim Sao我只想用regex你可以在regex101中保存你的支票并在这里分享,但是如果上面写着
我需要100000欧元打电话给我123456789跟我谈谈。
?我认为在这种情况下,除了possib之外,regex是不好的用电话号码缩小潜在的信息范围。我认为在这种情况下,你必须有简单的选择——要么更换所有看起来像手机的东西(比如-
我需要(修订版)€给我打电话(修订版)谈谈。
)或者只是标记这些消息,让其他人浏览并决定每一条消息。工作费用为欧元,但不为美元或%,因为它们在数字之前,所以要添加更多的示例。@CristianCV:我已根据您的需要编辑了我的答案。是否将其重新添加到您的答案中?这个。它还将捕获
100000欧元
作为电话号码er
100000
。更不用说像日期这样的东西也会被错误地标记为电话号码和任何其他号码检查帖子的更新,但在演示中选择了两个选项,电话和金额,我只想选择电话。@CristianCV:我知道,请参阅更新帖子中的JS提琴。你需要e使用这里的组。已经有一个用户给了我正确的答案,谢谢你