正则表达式必须满足以下条件:
- 允许的字符
09XYAB[]-
- 在 '
-
' 之后我不能有空格、']
' 或 '[
' - 此外,我将不得不检查括号的顺序。
我已经写了这个表达式' ([-(?!\[|\]|\ )09XYAB\[\]\-]){0,}
'但是我一直得到错误结果让我们说这个测试字符串' ABY-Ab[A0-]
'。
正则表达式必须满足以下条件:
09XYAB[]-
-
' 之后我不能有空格、' ]
' 或 ' [
'我已经写了这个表达式' ([-(?!\[|\]|\ )09XYAB\[\]\-]){0,}
'但是我一直得到错误结果让我们说这个测试字符串' ABY-Ab[A0-]
'。
@burning_LEGION 的回答正确地提供了解决方案的前半部分。这个答案提供了后半部分;验证匹配的括号对,即使它们是嵌套的。@Sniffer 是正确的,它不能用单个正则表达式来完成。然而,正确解析嵌套结构可以相当容易地使用 JavaScript 正则表达式通过从内到外解析来完成......
由于 JavaScript 正则表达式语法不提供递归表达式,因此当括号嵌套时,不可能匹配最外面的一对匹配括号。然而,编写一个正确匹配最里面的一对匹配括号的正则表达式是很容易的:
/\[[^[\]]*\]/g
下面经过测试的 JavaScript 函数验证了可能具有嵌套括号对的字符串的正确括号对匹配。它是通过使用上述正则表达式从内到外迭代地去除匹配的最里面的括号对来实现的。删除所有(可能是嵌套的)匹配对后,任何剩余的括号字符都表示该字符串具有无效的括号匹配。
function validBracketNesting(text) {
// Regex to match innermost matching brackets
var re_innerbrackets = /\[[^[\]]*\]/g;
// Iterate stripping matching bracket pairs from inside out.
while (text.search(re_innerbrackets) !== -1) {
text = text.replace(re_innerbrackets, '');
} // All (possibly nested) matching bracket pairs removed.
// Any remaining bracket indicates invalid bracket pairing.
return (text.match(/[[\]]/)) ? false : true;
}
使用这个正则表达式^([09XYAB\[\]]|(-(?![ \[\]])))+$
这部分[09XYAB\[\]]
抓住09XYAB[]
这部分(-(?![ \[\]])))
抓住-
和[]
/或空格不能成为下一个符号
唉,正则表达式无法检查订单,这对正则表达式来说是一项艰巨的任务,不是为了这个目的
怎么样:
^(?!-[\[\]])[09XYAB\[\]-]+$
解释:
The regular expression:
(?-imsx:^(?!-[ \[\]])[09XYAB\[\]-]+$)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
(?! look ahead to see if there is not:
----------------------------------------------------------------------
- '-'
----------------------------------------------------------------------
[ \[\]] any character of: ' ', '\[', '\]'
----------------------------------------------------------------------
) end of look-ahead
----------------------------------------------------------------------
[09XYAB\[\]-]+ any character of: '0', '9', 'X', 'Y', 'A',
'B', '\[', '\]', '-' (1 or more times
(matching the most amount possible))
----------------------------------------------------------------------
$ before an optional \n, and the end of the
string
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------