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

zaq*_*zaq 6 javascript regex

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

例如:

"" = true
"abc" = true
"+1" = true
"+1abc" = true
"+2" = false
"+abc" = false
Run Code Online (Sandbox Code Playgroud)

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

mVC*_*Chr 8

首先,匹配组的第二部分不是可选的,因此您应该删除?.

其次,因为你只关心开头出现的内容,所以在$之前不需要测试整个字符串.

最后,要使空字符串返回true,您还需要测试/ ^ $ /.

结果是:

/^(\+1|[^+]|$)/
Run Code Online (Sandbox Code Playgroud)

例如:

/^(\+1|[^+]|$)/.test("");      // true
/^(\+1|[^+]|$)/.test("abc");   // true
/^(\+1|[^+]|$)/.test("+1");    // true
/^(\+1|[^+]|$)/.test("+1abc"); // true
/^(\+1|[^+]|$)/.test("+2");    // false
/^(\+1|[^+]|$)/.test("+abc");  // false
Run Code Online (Sandbox Code Playgroud)

见演示

(控制台应该打开)


rua*_*akh 6

一些选择:

^($|\+1|[^+])        <-- cleanest
^(\+1.*|[^+].*)?$    <-- clearest
^(?!\+(?!1))         <-- coolest :-)
Run Code Online (Sandbox Code Playgroud)