[英]Check if string is repetition of an unknown substring in javascript
我嘗試使用此處提到的regexp解決javascript中的相同問題: 檢查字符串是否是未知子字符串的重復
我在Java腳本的第一個答案中翻譯了正則表達式: ^(.+){2,}$
但它不能按我預期的那樣工作:
'SingleSingleSingle'.replace(/^(.+){2,}$/m, '$1') // returns 'e' instead of exptected 'Single'
我在俯視什么?
我目前還沒有解釋為什么它返回e
,但是.
匹配任何字符,而.{2,}
基本上僅表示“匹配任何兩個或更多字符”。
您想要的是通過使用反向引用來匹配您在捕獲組中捕獲的任何內容:
/^(.+)\1+$/m
我只是注意到,這也是您鏈接的答案建議使用的: /(.+)\\1+/
.+) /(.+)\\1+/
。 表達式完全相同,您無需為JavaScript更改任何內容。
我認為您得到'e'的原因是{2,}
意味着與之匹配的正則表達式(.+)
在本例中為(.+)
要進行兩次或多次重復。 {2,}
不保證重復內容彼此匹配,僅保證它們都符合(.+)
的匹配條件。
從我所看到的(使用Expresso )看來, (.+)
的第一個匹配是“ SingleSingleSingl”(由於貪婪匹配),而第二個匹配是“ e”。 由於捕獲組僅記住它們的最后一場比賽,因此,replace()會給您返回“ e”的原因。 如果您使用(.+?)
(用於非貪心或勉強匹配),則每個字符都將匹配,但您仍然只會得到最后一個字符“ e”。
正如Felix提到的那樣,使用反向引用是我所知道的確保重復彼此匹配的唯一方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.