我需要一个JavaScript的正则表达式,它将匹配任何不以+
字符开头的字符串。除了一个例外,以+1
开头的字符串是可以的。空字符串也应该匹配。
例如:
"" = true
"abc" = true
"+1" = true
"+1abc" = true
"+2" = false
"+abc" = false
到目前为止,我发现^(\+1|[^+]?)$
处理+1
部分,但我似乎无法在不使第一部分无效的情况下允许更多字符。我认为^(\+1|[^+]?).*?$
会起作用,但似乎与一切相符。
答案 0 :(得分:8)
首先,匹配组的第二部分不是可选的,因此您应该删除?。
其次,由于你只关心开头出现的内容,所以在$。之前没有必要测试整个字符串。
最后,要使空字符串返回true,您还需要测试/ ^ $ /。
结果是:
/^(\+1|[^+]|$)/
例如:
/^(\+1|[^+]|$)/.test(""); // true
/^(\+1|[^+]|$)/.test("abc"); // true
/^(\+1|[^+]|$)/.test("+1"); // true
/^(\+1|[^+]|$)/.test("+1abc"); // true
/^(\+1|[^+]|$)/.test("+2"); // false
/^(\+1|[^+]|$)/.test("+abc"); // false
(控制台应该打开)
答案 1 :(得分:6)
一些选项:
^($|\+1|[^+]) <-- cleanest
^(\+1.*|[^+].*)?$ <-- clearest
^(?!\+(?!1)) <-- coolest :-)
答案 2 :(得分:1)
这应该有效:^(\+1.*|[^+].*)?$
这也是直截了当的。
\+1.*
- 匹配+1(以及可选的其他一些东西)
[^+].*
- 或者一个不是加号的字符(以及可选的其他东西)
^()?$
- 或者如果这两者都不匹配,那么它应该是一个空字符串。
答案 3 :(得分:1)
试试这个正则表达式:
regex = /^([^+]|\+1|$)/
答案 4 :(得分:0)
如果您只关心字符串的开头,请不要打扰搜索结尾的正则表达式:
/^($|\+1|[^+])/
或者您可以在不使用正则表达式的情况下执行此操作:
myString.substr(0,1) != "+" || myString.substr(0,2) == "+1";