簡體   English   中英

常用表達

[英]regular expressions

是否可以合並這兩個正則表達式?

  • /^[A-Za-z]\\S{3,30}$/
  • /^(?:(\\w)(?!\\1\\1))+$/

我想要一串:

  • 只有字母,
  • 長度在 3 到 30 之間,
  • 空間不足,
  • 對同一字母重復兩次以上(例如:'ddd' //false, 'dtdddyyt' //false, 'dtddyyt'//true)表示否。

您可以將第二個模式用作否定前瞻斷言一次,以不匹配字符串中的ddd

^(?!\S*(\w)\1\1)[A-Za-z]\S{3,30}$
  • ^字符串開始
  • (?!負前瞻
    • \\S*(\\w)\\1\\1匹配可選的非空白字符,捕獲一個單詞字符並將其與 2 個反向引用匹配
  • )關閉前瞻
  • [A-Za-z]\\S{3,30}匹配單個字符 A-Za-z 和 3-30 個非空白字符
  • $字符串結尾

正則表達式演示

 const regex = /^(?!\\S*(\\w)\\1\\1)[A-Za-z]\\S{3,30}$/; [ "ddad", "dtddyyt", "adaddd", "dtdddyyt", "ddd" ].forEach(s => console.log(`${s} --> ${regex.test(s)}`));

您可以使用

/^(?:([A-Za-z])(?!\1{2})){3,30}$/
/^(?:(\p{Alphabetic})(?!\1{2})){3,30}$/u

請參閱正則表達式演示 注意

  • 僅字母- [A-Za-z] / \\p{L}\\p{Alphabetic} (在帶有/u標志的符合 ECMAScript 2018+ 的 JS 環境中可用)
  • 3 到 30 之間的長度- {3,30}
  • 沒有空格- 此條件已包含在第一個條件中
  • 對同一字母重復兩次以上- ([A-Za-z])(?!\\1{2})

JavaScript 測試:

 const rx = /^(?:([A-Za-z])(?!\\1{2})){3,30}$/; const texts = ["ddad","dtddyyt","adaddd","dtdddyyt","ddd"]; for (let text of texts) { console.log(text, "=>", rx.test(text)); }

更多詳情

  • ^ - 字符串的開始
  • (?: - 非捕獲組的開始(用作模式序列的容器):
    • ([A-Za-z]) - 第 1 組:一個 ASCII 字母( \\p{L} / \\p{Alphabetic}匹配任何 Unicode 字母)
    • (?!\\1{2}) - 在字母之后,同一個字母不應出現兩次
  • ) - 組結束
  • {3,30} - 匹配非捕獲組內連續出現的三到三十個模式序列
  • $ - 字符串的結尾。

暫無
暫無

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

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