javascript正则表达式与[x | y | z | xy | yz]

时间:2017-02-16 14:51:43

标签: javascript regex

我有正则表达式:

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

这基本上只是解析一个等式:

[household_roster_relationships_topersona_nameadditionalpersono] = "1"

它很好用,

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

但是当方程有

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

解析停在

的第一个字符处
'<=','>=','<>'.

我创建了一个演示on regex101

如何更正正则表达式以便在这种情况下正常工作?

3 个答案:

答案 0 :(得分:2)

只需更改您的char类进行更改:

Public Function PopUp()

   Dim strSQL As String
   Dim rs As DAO.Recordset
   Dim db As DAO.Database

   strSQL = "SELECT PopUpReminders.*, PopUpReminders.ReminderCompletion, PopUpReminders.ReminderStartDate, PopUpReminders.Employee FROM PopUpReminders WHERE (((PopUpReminders.ReminderCompletion)=False) AND ((PopUpReminders.ReminderStartDate)<=Now() AND ((PopUpReminders.Employee)='" & Forms![Login]![txtUserName] & "'));"
   Set db = CurrentDb
   Set rs = db.OpenRecordset(strSQL)

   If rs.RecordCount = 0 Then
      'Do Nothing
   Else
      If rs.RecordCount > 0 Then
      Do
         DoCmd.OpenForm "SFPopUpReminder"
      Loop Until rs!ViewedRecord = True
      End If
   End If

   rs.Close
   Set rs = Nothing

End Function

See demo

答案 1 :(得分:1)

您需要使用分组构造替换字符类。

使用

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

请参阅regex demo(?:<>|[<>]=|[=><]) 非捕获组(仅用于分组子模式)与<><=>==匹配, ><

注意我减少了一些替代分支以使模式更紧凑。另外,我认为您最后只想匹配'",因此,仅仅['"]?(1或0 '")应该够了。

此外,您无需转义字符类中的[[[]匹配单个[),并且您无需在]之外转义]字符类,它匹配文字$_SERVER符号。

答案 2 :(得分:0)

您需要使用()代替[]来进行多字词类选择... see updated regex