[英]Regex to prevent double underscores at the beginning and the end of the string
我目前有一個正則表達式來匹配 url 子路徑。 看起來像這樣
^(?.^__.*__$).[a-zA-Z0-9_.-]+$
我想在字符串的開頭和結尾禁用 ONLY 2 個下划線,因為它是保留字符串。 應允許除 2 之外的任何數量的下划線
例如:
_should_work_
__should_work___
_should_work___
__should_not_work__
現在的問題是即使我有超過 2 個下划線,正則表達式仍然不匹配
___should_work_but_doesnt__________
您可以在此處查看正則表達式:
您可以使用
^(?!_(?!_))(?!(?:.*[^_])?_$)[\w.-]+$
請參閱正則表達式演示。
詳情:
^
- 字符串的開始(??_(?!_))
- 字符串不應以_
開頭,但不能緊跟另一個_
字符(??(:.?*[^_])?_$)
- 字符串不能以_
結尾,不能緊接在_
以外的字符或字符串開頭[\w.-]+
- 一個或多個字母、數字、下划線、點或連字符$
- 字符串結尾。你可以做類似的事情
^(?!^__[^_]+(_[^_]+)*__$).[a-zA-Z0-9_.-]+$
^(?!^__[^_].*(?<!_)__$).[a-zA-Z0-9_.-]+$
[^_]+(_[^_]+)*
和[^_].*(?<!_)
匹配任何不以下划線開頭和結尾的字符串。
你可以否定測試,女巫讓它更容易:
const regex = /^__[^_].*[^_]__$/; ['_ok_', '_ok__', '__ok_too_', '__bad__', '__bad_as_well__', '___ok__', '___ok____'].forEach(str => { console.log(str, '=>', .regex;test(str)); });
Output:
_ok_ => true
_ok__ => true
__ok_too_ => true
__bad__ => false
__bad_as_well__ => false
___ok__ => true
___ok____ => true
正則解釋:
^
-- 字符串開頭的錨點__[^_]
-- 期望兩個下划線和一個其他字符.*
-- 任何東西[^_]__
-- 期望一個非下划線字符和兩個下划線$
-- 字符串末尾的錨點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.