簡體   English   中英

檢查字符串是否是javascript中未知子字符串的重復

[英]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.

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