簡體   English   中英

我應該如何在 JavaScript 中使用正則表達式驗證完整的字符串格式?

[英]How should I validate the complete string format using regex in JavaScript?

我想驗證以下字符串格式:

'(:abc-xyz :abd-xyz-abx :v2-abc)'

我嘗試創建一個正則表達式:

const regex = RegExp('^[(][:][az|0-9|-]+(?: [:][az|0-9|-]+)*[)]$');

在大多數情況下它對我有用,但無法驗證字符串何時為:

字符串 = '(:abc--xyz-:abc-xyz-abx-:v2-abc-)'

我應該如何驗證字符串,以便在單詞之間但不允許在每個單詞的末尾使用“-”?

我的要求是:

string='(:abc-xyz :abd-xyz-abx :v2-abc)' -> Correct (only valid format others are incorrect).

example :
string='(:abc--xyz :abd-xyz-abx :v2--abc)' -> Incorrect
string='(:abc-xyz :abd-xyz-abx :v2-abc-)' -> Incorrect
string='(:abc-xyz:abd-xyz-abx :v2-abc-)' -> Incorrect

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

您可以使用-從字符 class 中取出,並在前綴:-的位置使用可選的重復組

還有| 在字符 class 將匹配 pipe 字面意思,所以如果你不想匹配它可以省略它。

^\(:[a-z0-9]+(?:-[a-z0-9]+)*(?: :[a-z0-9]+(?:-[a-z0-9]+)*)*\)$

解釋

  • ^字符串開頭
  • \(:匹配(:
  • [a-z0-9]+匹配 1+ 次a-z0-9中的任何一個
  • (?:-[a-z0-9]+)*可選擇重復-和 1+ 次a-z0-9中的任何一個
  • (?:非捕獲組
    • :[a-z0-9]+
    • (?:-[a-z0-9]+)*可選擇重復-和 1+ 次a-z0-9中的任何一個
  • )*關閉非捕獲組並重復 0+ 次
  • \)匹配)
  • $字符串結尾

正則表達式演示

 let pattern = /^\(:[a-z0-9]+(?:-[a-z0-9]+)*(?: :[a-z0-9]+(?:-[a-z0-9]+)*)*\)$/; [ "(:abc-xyz:abd-xyz-abx:v2-abc)", "(:abc--xyz-:abc-xyz-abx-:v2-abc-)", "(:abc--xyz:abd-xyz-abx:v2--abc)", "(:abc-xyz:abd-xyz-abx:v2-abc-)", "(:abc-xyz:abd-xyz-abx:v2-abc-)", ].forEach(s => console.log(`${s} ==> ${pattern.test(s)}`));

暫無
暫無

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

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