2012-09-21 88 views
0

我試圖圍繞這個和我所有的例子在谷歌和stackoverflow不幫我理解。通過字符串跳過/忽略特定字符

我有這個字符串

{{@test: mytest}} {{@test mytest}}

我想捕捉testmytest來自這兩個例子。所以如果在我的字符串中發生這兩個將返回相同的數組集。

這是我/我試圖到目前爲止

/{{\s*@\s*(.*)\s*:\s*(.*)\s*}}/

這將在第一個例子,但是無法在第二個。

所以我想也許答案是搜索槽跳過:的字符串?

回答

2

您還沒有明確的標準,但假設你想匹配可能不包含空格的文本,您可以使用此:

/{{\s*@\s*([^:\s]*)\s*:?\s*([^}\s]*)\s*}}/ 
  • [^:\s]*既不包含冒號的字符串匹配,也沒有空白
  • [^}\s]*既不包含結束括號也不空白的字符串匹配
  • :?可選結腸匹配
+0

我添加了'\ s *',這樣它就會匹配如果有空間或沒有(所以我從我的測試中相信) – Eli

+0

@Eli:是的,那很完美,不是嗎? ? –

+0

這個很好用!我改變了一點,因爲我導致一些結果被省略。我把它變成了這個'{{\ s * @ \ s *([^:\ s] *)\ s *:?\ s *(。*)\ s *}}' – Eli

1

嘗試\{\{\s*@([^@:\s]+)\s*:?\s+([^}\s]+)\s*\}\}

編輯:艾克,蒂姆Pietzcker擊敗了我。我們的表情有些微妙的差異,但是我認爲,任何一個人都應該做你想做的事。我選擇在幾個地方使用+而不是*,在那裏我對您的問題的解釋讓我相信至少必須有一個給定的字符。

編輯2:我的方法的一個優點是它不符合{{@testmy-test}}