匹配的詞我用,長度爲4有1號和3大寫字母匹配的詞下面的正則表達式:可能包含1-2位
\b(?=[A-Z]*\d[A-Z]*\b)[A-Z\d]{4}\b
我想知道的是我怎麼需要修改表達式以過濾掉長度爲10的單詞,其中包含0-2數字。
\b(?=[A-Z]*\d[A-Z]*\b)[A-Z\d]{10}\b
這將爲1個occurence工作,但如何擴展它來過濾0和2號呢?
匹配的詞我用,長度爲4有1號和3大寫字母匹配的詞下面的正則表達式:可能包含1-2位
\b(?=[A-Z]*\d[A-Z]*\b)[A-Z\d]{4}\b
我想知道的是我怎麼需要修改表達式以過濾掉長度爲10的單詞,其中包含0-2數字。
\b(?=[A-Z]*\d[A-Z]*\b)[A-Z\d]{10}\b
這將爲1個occurence工作,但如何擴展它來過濾0和2號呢?
把長度檢查到前瞻:
\b(?=[A-Z\d]{10}\b)(?:[A-Z]*\d){0,2}[A-Z]*\b
說明:
\b # Start at a word boundary
(?= # Assert that...
[A-Z\d]{10} # 10 A-Z/digits follow
\b # until the next word boundary.
) # (End of lookahead)
(?: # Match...
[A-Z]* # Any number of ASCII uppercase letters
\d # and exactly one digit
){0,2} # repeat 0, 1 or 2 times.
[A-Z]* # Match any number of letters
\b # until the next word boundary.
豎起大拇指。看起來是正確的,但仍然返回與「」前瞻匹配的值的正匹配,但是值包含的數字太多。添加一個過濾器來刪除這些:'x.match(/ \ b(?= [AZ \ d] {10})(?:[AZ] * \ d){0,2} [AZ] * \ b/g ).filter(function(y){return y.length == 10});' –
@TheSmose:謝謝;我誤解了這個問題,並認爲應該有10個或更多字符。我糾正了正則表達式 - 一個額外的字邊界就足夠了,不需要過濾器。 –
是數字總是將是相鄰的?如果是這樣的話,這應該是:'\ b(?= [AZ] * \ d {0,2} [AZ] * \ b)[AZ \ d] {10} \ b' –
@Asad是的,抱歉沒有提到它。 – Johan