2017-02-16 53 views
2

我有一個正則表達式:JavaScript的正則表達式使用[X | Y | Z | XY | YZ]

\[[^\[\]]*\]\s*[<>|<=|>=|=|>|<]\s*'?"?\w*'?"? 

這基本上只是解析公式,如:

[household_roster_relationships_topersona_nameadditionalpersono] = "1" 

它的作品好,

'=','>','<'. 

但是當方程

'<=','>=','<>'. 

'<=','>=','<>'. 

第一個字符解析停止我創建了一個演示on regex101

我怎樣才能更正正則表達式所以它會在這種情況下工作嗎?

+0

您應該瞭解字符類:'[<> | <=|> = | = |> | <]' == '[=><|]' –

回答

1

您需要用分組結構替換字符類。

使用

\[[^[\]]*]\s*(?:<>|[<>]=|[=><])\s*['"]?\w*['"]? 
      ^^^   ^ 

regex demo。所述(?:<>|[<>]=|[=><])非捕獲組(只用於分組的子模式)匹配<><=>==><

注意我減少了一些替代分支,使圖案更緊湊一些。另外,我想你只是想在最後匹配'",所以,僅僅['"]?(1或0 '")就足夠了。

而且,你不需要逃脫[字符類中([[]匹配單個[),你不需要逃避]字符類之外,它字面]符號相匹配。

+0

嗨,這很好。用演示中的例子。我有另一個打破正則表達式的例子。 [diagnostic_procedures_performed] ='UNDEFINED_CODE'和[other_procedure_date]>「01-01-1901」 我該如何解決? – sh977218

+0

用'[\ w - ] *'(0+字或'-'符號)或'[^''] *'(除了'''和'「'以外的0+字符)替換'\ w * 。後者可能更通用。 –

2

只要改變你的字符類的交替:

\[[^\[\]]*\]\s*(<>|<=|>=|=|>|<)\s*'?"?\w*'?"? 
      ^   ^

See demo

+0

也許使它成爲一個非捕獲組織! –

+1

@ibrahimmahrir一個可以,但這不會改變比賽 –

+0

雖然它會提升性能!OP可能學到一些東西! –

相關問題