2014-09-12 48 views
0

我們需要在JavaScript中使用一些HTML格式的匹配電話號碼,並且非常接近但存在問題。我們不想匹配顯示在max-length="404-555-1212"等屬性中的電話號碼。請看下面的文字:JavaScript正則表達式來匹配電話號碼,但不是HTML屬性

Sample: 

Shouldn’t Match: 
max-length='' 
max-length="" 
max-length=012-345-6789" 

Don’t want the > 
<strong>866.643.4170</strong> 

Don’t really want this plus included either: 
+1-(800)-555-2468 

abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 
-.,[email protected]#$%^&*();\/|<>"' 
12345 -98.7 3.141 .6180 9,000 +42 
555.123.4567  +1-(800)-555-2468 

用下面的正則表達式,我們能夠抓住所有的電話號碼,但不排除屬性:

/(\d{1}[-. ])?\(?\d{3}\)?[-. ]? *\d{3}-? *[-. ]?\d{4}/g 

我們試過以下,但它留下該><strong>末:

/[^"='](\d{1}[-. ])?\(?\d{3}\)?[-. ]? *\d{3}-? *[-. ]?\d{4}/g 

如何使這項工作有什麼想法?

+0

不需要的屬性總是被稱爲「最大長度」,或者他們可以是任何東西?電話號碼前是否有等號? – Schlaus 2014-09-12 21:07:42

+0

不要針對HTML運行regexp。相反,提取值並針對它們運行regexps。 – 2014-09-12 21:28:02

+0

@Schlaus屬性可以是任何東西,不只是最大長度。在合法的電話號碼之前永遠不會有一個=。 – 2014-09-13 13:08:41

回答

0

所以有人昨天回答了這個問題,我回來接受答案,但它已被刪除。然而,他們提供的解決方案確實有效,爲了後代,我想發佈他們提供的解決方案。

這裏是一個解決問題的正則表達式:

/(?:\d[-. ])?\(?\d{3}\)?[-. ]?\d{3}[-. ]?\d{4}(?!["'])/g 

這裏是一個鏈接到工作示例:

http://regex101.com/r/rK6wY1/1

我希望我可以給信貸到原來的回答者。