2014-12-29 295 views
-2

抽象問題的開頭字符:正則表達式匹配:不包含在一個字符串

匹配字符串不與「炭」啓動和恢復比賽。

我正則表達式(不完美):

/(<XX>){1}([^#]*)(<\/XX>){1}/ig 

確實

<XX>#test</XX> // not matched 
<XX>test</XX> // matched + return 'test' 
<XX>te#st</XX> // not matched 

但應該做

<XX>#test</XX> // not matched 
<XX>test</XX> // matched + return test 
<XX>te#st</XX> // matched + return te#st 

返回片段(即,標籤之間的組='測試',例如'$ 2')。

問題例如https://www.regex101.com/r/vT9kS7/1

+2

你在做什麼語言? – ryekayo

+0

javascript,但沒關係 – ziom

+0

您的要求是「匹配不包含字符的字符串」,是您嘗試匹配的字符數? – TWhite

回答

2

嘗試,而不是這個

<XX>(?!#)(.*)<\/XX> 

(<XX>){1}([^#]*)(<\/XX>){1} 

您可以在fork of your fiddle檢查出更新的正則表達式。

亮點:

  • (?!#)是負前瞻 - #
  • 「碎片」非常普遍:所以我沒有采用.(在(.*))。
  • 我丟棄了原始正則表達式中的第一個和最後一個捕獲組(即分別用(<XX>)(<\/XX>)分別替換爲<XX><\/XX>)。如果您不需要捕獲組,請不要使用它們。
  • 我從原來的正則表達式中刪除了顯式量詞{1}。這兩個實例都是不必要的。
0

根據你的描述和測試用例,以下工作:

/(<XX>)([^#].*)(<\/XX>)/ig 

以下的正則表達式:

/(<XX>)([^#].*|)(<\/XX>)/ig 

也將使空<XX></XX>的情況。

相關問題