2017-06-25 91 views
0

內部整數尋找一種模式在ECMAScript味道找到所有整數
積極的,像+1
負像-1
以及隱含的正樣1
一行內,如:如何搭配一條線串

0 zero +1 2.2 1.1 -1 -1.1 one 1 

NOT多線,如:

0 
zero 
+1 
1.1 
etc, ... 

因此,對於這條線,圖案應符合:(0 +1 -1 1

0 zero +1 2.2 1.1 -1 -1.1 one 1 
^  ^^   ^^  ^ 

基於:

  1. ECMAScript
  2. 重複是好的,所以12346789應該匹配
  3. 如果有可能,不捕獲組()
  4. 儘可能高效

實施例:
像甲笨圖案:(?:^\d+|(?!\d)[+-]?\d+(?!\.)|\d+$)可以匹配0 +1 -1 1
不過,這並不像一個串匹配1

0 zero 1 two 2 
^   ^ 

由於(?!\d)之前+ and - signs

+0

**我不是在尋找JavaScript代碼** –

+0

您不能在沒有捕獲組的情況下使用模式,因爲此任務的最佳模式依賴於ECMAScript風格不支持的後臺模式。嘗試'reg(R「((?:^ | \ s)([+ - ]?\ d +)(?!\。\ d)(?!。* \ r?\ n))」)' –

+0

@WiktorStribiżew 。好的。 **和**捕獲組怎麼樣?我只是說如果有可能。 –

回答

1

試試這個

(?:^|)[+-]?\d+?(?= |$) 

它做你想做的一切,除了拒絕多行。這是不可能拒絕在ECMAScript中的正則表達式多,但你可以很容易地測試多和拒絕你的正則表達式檢查上面使用這個簡單的正則表達式之前:

[\n\r]+? 

注意:您不需要運行此全球模式;您可以在第一場比賽中休息(即第一次換行),因此請勿使用g標誌。

+1

你的模式快2-3倍。 –

+0

好的,請在'\ d +'之後告訴我'?'。這是一個懶惰的問號或可選的問號。它有什麼作用? –

+1

問號是懶惰的,並在加號或星號後出現。懶惰表示它儘可能少匹配。與默認加號或星號相對的是貪婪且儘可能匹配。在你的場景和上面的模式中,它可能並不重要,因爲我們將數字限制在空格之間,所以你可能會刪除問號並獲得更多的性能。同樣,在第二種模式中,如果你遵循我的建議,不使用'g'標誌,那麼你也可以刪除加號和問號,並獲得更多的性能。 –