2013-07-11 69 views
0

我想創建以下正則表達式:需要一個特定的正則表達式

* [ * , * ] * 

其中*可以是任意大小 我曾嘗試以下的任何文本:

/[*.,.*]/ 

但不是它 (如果它很重要,我將需要它的JavaScript)

正確的文本示例:

  • 測試[1,2]
  • 測試[3,測試2]

誰能幫助?

+2

你能給出正確的字符串的一些例子嗎? –

+1

嘗試'/(.*)\[(.*),(.*)\](.*)/' – casraf

+0

您的預期輸出是什麼? – NeverHopeless

回答

2

試試這個:

[^\[]*\[[^\]]*\] 
^----^ anything but [ 
     ^^ - [ 
     ^----^ - anything but ] 
       ^^ - ] 

可選你可以用你的整個正則表達式中^$只匹配整個字符串。

例子:

> /^[^\[]*\[[^\]]*\]$/.test("test[1,2]") 
true 
> /^[^\[]*\[[^\]]*\]$/.test("test[1,test2]") 
true 
> /^[^\[]*\[[^\]]*\]$/.test("test_wrong") 
false 
> /^[^\[]*\[[^\]]*\]$/.test("test[wrong") 
false 
+0

您也可以使用懶星:'。*?'而不是否定類。 – georg

+0

@ thg435,是的。我想這是一個在這種情況下選擇的問題。我只是想明確否定更多:) – mishik

0
/^.*\[.*,.*\].*$/ 

// e.g: 
"my [awesome, string] of text".match(/^.*\[.*,.*\].*$/) 
+0

這很好,但。也會匹配空白區域,假設提供了示例文本,我認爲這是不可取的。 – Craig

+0

由於貪婪,當有兩個預期的匹配項時會失敗。 – Amadan

0

試試這個正則表達式:

/\S+\[\S+,\S+\]/ 

你想分組的結果呢?

正如指出的,\ S將匹配任何非空白字符,包括,所以這可能會更好,但更難以閱讀。

/([\w\d]+\[[\w\d]+,[\w\d]+\])/g 

我已經添加了括號,以便您可以將它與匹配方法一起用於獲取所有匹配事件的列表。

+0

不,我只需要從這個正則表達式中得到一個字符串,而不是一組字符串,但是謝謝:) – user1322801

+0

如果你這樣做:thing.match(re)它將返回所有匹配。如果使用'g'標誌追蹤正則表達式,使用()來分組您實際感興趣的內容將會使所有事件出現在單個字符串中。 – Craig

+0

也會匹配'a [1,2,3]'。 – Amadan

0

這是你的正則表達式:

/.*\[.*,.*\].*/

+0

由於貪婪,當有兩個預期的匹配項時會失敗。 – Amadan

+0

也許是一個例子? – Trogvar

+0

如果您只想匹配存在,則可能就足夠了。如果你想計數,捕捉或替換,它會變得非常糟糕。此外,它也會與'test [1,2,3,4]'相匹配。 – Amadan

1
/\[[^,]*,[^]]*\]/ 
--    opening bracket 
    ----   non-comma 
     -    any number of them 
     -   comma 
     ----  non-closing-bracket 
      -  any number of them 
       -- closing bracket