[英]regular expressions
是否可以合並這兩個正則表達式?
/^[A-Za-z]\\S{3,30}$/
/^(?:(\\w)(?!\\1\\1))+$/
我想要一串:
您可以將第二個模式用作否定前瞻斷言一次,以不匹配字符串中的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}
([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.