簡體   English   中英

正則表達式 - 匹配任何不以+開頭但允許+1的字符串

[英]Regular Expression - Match any string not starting with + but allow +1

我需要一個JavaScript的正則表達式,它將匹配任何不以+字符開頭的字符串。 除了一個例外,以+1開頭的字符串是可以的。 空字符串也應該匹配。

例如:

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

到目前為止,我發現^(\\+1|[^+]?)$負責+1部分,但我似乎無法在不使第一部分無效的情況下允許更多字符。 我以為^(\\+1|[^+]?).*?$會起作用,但它似乎匹配所有東西。

首先,匹配組的第二部分不是可選的,因此您應該刪除?。

其次,因為你只關心開頭出現的內容,所以在$之前不需要測試整個字符串。

最后,要使空字符串返回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|[^+])        <-- cleanest
^(\+1.*|[^+].*)?$    <-- clearest
^(?!\+(?!1))         <-- coolest :-)

這應該工作: ^(\\+1.*|[^+].*)?$

它也很簡單。

\\+1.* - 匹配+1(以及可選的其他一些東西)
[^+].* - 或者一個不是加號的字符(以及可選的其他一些東西)
^()?$ - 或者如果這兩者都不匹配,那么它應該是一個空字符串。

試試這個正則表達式:

regex = /^([^+]|\+1|$)/

如果您只關心字符串的開頭,請不要打擾搜索結尾的正則表達式:

/^($|\+1|[^+])/

或者你可以不使用正則表達式來做到這一點:

myString.substr(0,1) != "+" || myString.substr(0,2) == "+1";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM