簡體   English   中英

精確匹配邊界未知的10位數字?

[英]Match exactly 10 digits with unknown boundaries?

我可以使用任何正則表達式來匹配正好10位數的塊嗎? 例如,我有這個:

/\d{10}(?!\d+)/g

而這種匹配2154358383給予時2154358383很好,但也符合1213141516給予時12345678910111213141516 ,我不想要的。

我認為我需要的是一個后向斷言(除了已經在其中的超前查詢),該斷言可確保匹配之前的字符不是整數,但我不知道該怎么做。

我試過了

/(?:[^\d]+)\d{10}(?!\d+)/g

但這打破了我的第一場比賽2154358383 ,這很糟糕。

我該如何寫才能只匹配邊界未知的10個整數(不多不少)的組?

我還應該注意,我正在嘗試從更大的字符串中提取這些內容,因此^$是不可能的。

這應該起作用: ([^\\d]|^)\\d{10}([^\\d]|$)

你能做點什么:

([^\d]|^)(\d{10})([^\d]|$)

換句話說,字符串或非數字的開頭是十位數,然后是字符串或非數字的結尾。 那應該可以解決您在上面尋找的情況。

您可以像這樣使用正則表達式:

var regex = /([^\d]|^)(\d{10})([^\d]|$)/;
var match = regex.exec(s);
var digits = match[2];

這應該匹配字符串開頭( ^ )或中間/結尾( [^\\d](?!\\d) 。如果您在乎確切的匹配,而不僅僅是在首先,您需要抓住比賽的第一組。

/(?:[^\d]|^)(\d{10})(?!\d)/g

如果JavaScript正則表達式支持向后看,這會更容易。

接下來呢?

perl -nle 'print if /(\b|\D)(\d{10})(\D|\b)/' <<EOF
123456789
x123456789
123456789x
1234567890
x1234567890
1234567890x
12345678901
x12345678901
x12345678901x
EOF

僅打印

1234567890
x1234567890
1234567890x

嘗試這個

var re = /(?:^|[^\d])(\d{10})(?:$|[^\d])/g

re.exec ( "2154358383")
//["2154358383", "2154358383"]
re.exec ( "12345678910111213141516" )
//null
re.exec ( "abc1234567890def" )
//["c1234567890d", "1234567890"]

val = '1234567890 sdkjsdkjfsl 2234567890 323456789000 4234567890';
re.exec ( val )
//["1234567890 ", "1234567890"]
re.exec ( val )
//[" 2234567890 ", "2234567890"]
re.exec ( val )
//[" 4234567890", "4234567890"]
re.exec ( val )
//null

我知道您說“ no ^”,但如果這樣使用它,也許還可以嗎?:

rx = /(?:^|\D)(\d{10})(?!\d)/g

這是一個快速測試:

> val = '1234567890 sdkjsdkjfsl 2234567890 323456789000 4234567890'
'1234567890 sdkjsdkjfsl 2234567890 323456789000 4234567890'
> rx.exec(val)[1]
'1234567890'
> rx.exec(val)[1]
'2234567890'
> rx.exec(val)[1]
'4234567890'

后面看起來很簡單:

/(?<!\d)\d{10}(?!\d)/g

我會作弊並做類似的事情

if (myvar.toString().substring(1, 10) = "1234567890") ....

:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM