簡體   English   中英

正則表達式防止字符串開頭和結尾出現雙下划線

[英]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__________

您可以在此處查看正則表達式:

https://regex101.com/r/H9F1NN/1

您可以使用

^(?!_(?!_))(?!(?:.*[^_])?_$)[\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.

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