正则表达式 - 匹配任何不以+开头但允许+1的字符串

时间:2011-11-19 00:22:21

标签: javascript regex

我需要一个JavaScript的正则表达式,它将匹配任何不以+字符开头的字符串。除了一个例外,以+1开头的字符串是可以的。空字符串也应该匹配。

例如:

"" = true
"abc" = true
"+1" = true
"+1abc" = true
"+2" = false
"+abc" = false

到目前为止,我发现^(\+1|[^+]?)$处理+1部分,但我似乎无法在不使第一部分无效的情况下允许更多字符。我认为^(\+1|[^+]?).*?$会起作用,但似乎与一切相符。

5 个答案:

答案 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

See demo

(控制台应该打开)

答案 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";