正则表达式-从字符串

时间:2019-02-07 20:15:05

标签: regex

我需要从带分隔符(波浪号)的字符串中提取两个电话号码。棘手的部分是电话号码的格式可能会有所不同。

字符串模式保持不变。但是电话号码的格式可以是三种类型之一

(1)  4 digit extensions. (ex. 1001)
(2) 10 digit (5551112222)
(3) 10 digit with country code (+15558889999)

我需要分机号或10位数字,且+1国家/地区代码被删除。所以

(1) 1001 = 1001
(2) 5551112222 = 5551112222
(3) +15558889999 = 5558889999

示例字符串

2019/02/06/2019-02-06T084903~call~5551112222~+15558889999~231a6a62-c1c8-43a8-ac2e-f8428237385c.WAV

从上面的字符串中,我需要提取两个正确的10位数字格式的电话号码

(1) 5551112222
(2) 5558889999

到目前为止,我有以下正则表达式:

(?<=\~)(.*?)(?=\~)

这给了我三组

(1) Call
(2) 5551112222
(3) +15558889999

但是,我需要的是两组格式正确的

(1) 5551112222
(2) 5558889999

我在Integromat上使用了此正则表达式模式,因此在这种情况下,没有任何编码语言解决方案将起作用。它必须是100%正则表达式。

对此表示感谢。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="my-btn" id="1"></button>
<button class="my-btn" id="2">100</button>
<button class="my-btn" id="3"></button>
<button class="my-btn" id="4">200</button>
<button class="my-btn" id="5"></button>

请参见regex demo

如果后向查找有问题,请使用经过修改的变体:

(?<=~\+|~)([0-9]+)(?=~)

详细信息

  • (?:(?<=~\+)|(?<=~))([0-9]+)(?=~) -当前位置的左侧必须紧靠(?<=~\+|~)~+
  • ~-第1组:一个或多个数字
  • ([0-9]+)-当前位置的右边必须有(?=~)