我需要从带分隔符(波浪号)的字符串中提取两个电话号码。棘手的部分是电话号码的格式可能会有所不同。
字符串模式保持不变。但是电话号码的格式可以是三种类型之一
(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%正则表达式。
对此表示感谢。谢谢!
答案 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]+)
-当前位置的右边必须有(?=~)
。