2016-02-17 27 views
6

Bu regex'i çalıştırmaya çalışıyorum ama konsolumu sıkıştı. Niye ya?Bu kod neden node.js - Hata Javascript üzerinde?

var str = "Шедевры православной музыки - 20 золотых православных песен"; 
str.match(/^(([\u00C0-\u1FFF\u2C00-\uD7FF]+[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]*)+) [a-z]+[^\u00C0-\u1FFF\u2C00-\uD7FF]*$/i); 
+3

Neyle takılırsın? Bunu konsolda giriyor ve donuyor mu? – Cristy

+8

Sadece ([\ u00C0- \ u1FFF \ u2C00- \ uD7FF] + [^ az \ u00C0- \ u1FFF \ nedeniyle [katastrofik geri izleme] (https://regex101.com/r/eT6gL3/1) neden olur u2C00- \ uD7FF] *) +) 'parçası. [Katastrofik geri izleme hakkında daha fazla bilgi burada bulunabilir] (http://www.regular-expressions.info/catastrophic.html). Regex için gerçek gereksinimler nelerdir? –

+1

['^ ([\ u00C0- \ u1FFF \ u2C00- \ uD7FF] + (?: [^ Az \ u00C0- \ u1FFF \ u2C00- \ uD7FF] + [\ u00C0- \ u1FFF \ u2C00- \ için mi arıyorsunuz? uD7FF] +) *) [az] + [^ \ u00C0- \ u1FFF \ u2C00- \ uD7FF] * $ '] (https://regex101.com/r/eT6gL3/2)? –

cevap

8

Sizin düzenli ifade catastrophic backtracking (a demo of your regex here bakınız) (([\u00C0-\u1FFF\u2C00-\uD7FF]+[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]*)+) nedeniyle bölümü neden olur. [^a-z\u00C0-\u1FFF\u2C00-\uD7FF]*, sıfır karakterlerle eşleşebildiğinden, temel olarak, geriye dönük bir soruna neden olan klasik bir (a+)+ benzeri bir modele (cf: ([\u00C0-\u1FFF\u2C00-\uD7FF]+)+) sahipsiniz. ,

^([\u00C0-\u1FFF\u2C00-\uD7FF]+(?:[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]+[\u00C0-\u1‌​FFF\u2C00-\uD7FF]+)*) [a-z]+[^\u00C0-\u1FFF\u2C00-\uD7FF]*$ 

İşte regex demo

bakınız:

ondan kurtulmak için, alt şablonlar gruplama içindeki zorunlu olduğundan emin olun ve tüm gruplamaya bir * niceleyici uygulamak gerekir [\u00C0-\u1FFF\u2C00-\uD7FF]+(?:[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]+[\u00C0-\u1‌​FFF\u2C00-\uD7FF]+)* kibritler:

  • [\u00C0-\u1FFF\u2C00-\uD7FF]+ - bir veya daha fazla karakter [\u00C0-\u1FFF\u2C00-\uD7FF] aralıkları
  • (?:[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]+[\u00C0-\u1‌​FFF\u2C00-\uD7FF]+)* - sıfır ya da daha fazla sekans:
    • [^a-z\u00C0-\u1FFF\u2C00-\uD7FF]+ - \u00C0-\u1‌​FFF\u2C00-\uD7FF aralıklardan bir veya daha fazla karakter - a-z\u00C0-\u1FFF\u2C00-\uD7FF aralıkları
    • [\u00C0-\u1‌​FFF\u2C00-\uD7FF]+ gelenler dışında bir ya da daha fazla karakter.
İlgili konular