簡體   English   中英

JS中的RegEx查找3個相同的連續字符

[英]RegEx in JS to find No 3 Identical consecutive characters

在使用正則表達式的JS中,如何找到3個字符的序列,“ abb”有效,而“ abbb”無效(可以是字母,數字和非字母數字)。

這個問題是我在這里提出的一個問題的變體: 如何將這些regex與javascript結合使用

這是錯誤的: /(^([0-9a-zA-Z]|[^0-9a-zA-Z]))\\1\\1/ ,那么正確的方法是什么?

這取決於您的實際意思。 如果您只想匹配三個不相同的字符(也就是說,如果abb對您有效),則可以使用以下否定前瞻:

(?!(.)\1\1).{3}

它首先斷言,當前位置后沒有三個相同字符。 然后匹配這三個字符。

如果您真的想匹配3個不同的字符(僅適用於abc東西),它將變得更加復雜。 請改用這兩個否定的前瞻:

(.)(?!\1)(.)(?!\1|\2).

首先匹配一個字符。 然后我們斷言,這個字符后面沒有相同的字符。 如果是這樣,我們匹配另一個字符。 然后我們斷言,這些字符后面都沒有第一個字符或第二個字符。 然后我們匹配第三個字符。

請注意,這些否定的前行( (?!...) )不會占用任何字符。 因此,它們被稱為前行。 他們只是檢查接下來要做什么(或在這種情況下,究竟是不是下一個即將到來),然后正則表達式從它離開的地方繼續。 是一個很好的教程。

還要注意,這匹配除換行符以外的所有內容,如果使用DOTALL或SINGLELINE選項,則實際上匹配任何內容。 由於您使用的是JavaScript,因此只需在正則表達式關閉定界符附加s即可激活該選項。 如果(出於某種原因)您不想使用此選項,請替換. s [\\s\\S] (始終匹配任何字符)。

更新:

在注釋中澄清之后,我意識到您不想找到三個不同的字符,而是想斷言您的字符串不包含三個相同(和連續)的字符。

這稍微容易一些,並且更接近您以前的問題,因為它只需要一個否定的前瞻即可。 我們要做的是:我們從頭開始搜索三個連續的相同字符的字符串。 但是,由於我們要斷言它們存在,因此將其包裝在否定的提前中:

^(?!.*(.)\1\1)

前瞻錨定在字符串的開頭,因此這是我們將要查找的唯一位置。 然后,前瞻中的模式嘗試從字符串的任何位置查找三個相同的字符(因為.* ;相同的字符以與上一個問題相同的方式進行匹配)。 如果模式找到了這些,則負前行將因此失敗,因此該字符串將無效。 如果找不到三個相同的字符,則內部模式將永遠不匹配,因此否定的超前查找將成功。

要查找非三個相同的字符,請使用正則表達式模式

([\s\S])(?!\1\1)[\s\S]{2}

暫無
暫無

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

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