2017-05-17 33 views
0

望着這串:正則表達式 - 通過`contains`條件選擇內容?

[app/default-viewcomponent.ts] 

,我需要選擇整個字符串,只有當它包含.(至少一個)

這是我能夠做到的和它的作品(部分) :

(\[(.(?=.*\.[^\]]+)).*\]) 
  • () - 監守我需要提取的組內容
  • (.(?=.*\.[^\]]+))積極lookahead - 得到所有字符有未來的點
  • .*\] - 點後可以有更多的內容,這是關閉]

看這個圖片,有一個匹配:

enter image description here

但如果我]之前移動該點到最後一個字符,沒有匹配:

[app/default-viewcomponentts.]

問題:

我想我知道問題是什麼,這是因爲正則表達式不匹配點在]之前的情況。

我該如何修復我的正則表達式,還有 - 有更好/更簡單的方法嗎?

REGEX101

回答

1

正是在那裏引起問題的+,因爲在你的正則表達式安葬是條件

任何字符,是不是在這個類:[],一次或多次重複

+更改爲*(任意數量的重複)可以解決該問題。

新的正則表達式:(\[(.(?=.*\.[^\]]*)).*\])

測試對

[app/default-viewcomponentts.] 
[app/default-viewcomponent.ts] 
[app/default-viewcomponent.ts.] 
+0

需要在'(\ [(。(?=。* \。[^ \]] *))。* \] $)''''app/default-viewcomponentts] (最後點) –

3

您可以爲沒有lookarounds解決此問題,使用2否定字符類:

\[[^\].]*\.[^\]]*\] 

regex demo

請注意,這種方式你只要匹配[...]如果點是裏面的的括號。如果由於在lookahead中使用的.模式和.匹配的任意 char而是換行符char,您的原始正則表達式匹配[...]

詳細

  • \[ - 字面[
  • [^\].]* - 零個或多個字符比].
  • \.其他 - 點
  • [^\]]* - 比其他零個或多個字符]
  • \] - 文字](不需要轉義,但爲了一致性而逃脫)。
0

您可以檢查是否字符串包含與正則表達式/^[[].*[.].*[]]$/g匹配字符串點:用[

  • .*

    • ^[[]開始包含任何字符
    • [.]至少包含一個點
    • .*包含任何字符
    • []]$]

    var regex = /^[\[].*[.].*[\]]$/g; 
     
    
     
    function check(par){ 
     
        console.log(par + " match: " + regex.test(par)); 
     
    } 
     
    
     
    check("[app/default-viewcomponent.ts]"); 
     
    check("[app/default-viewcomponentts.]"); 
     
    check("[app/default-viewcomponentts]");
    Test other string <input type="text" id="test" value="" onchange="javascript:check(this.value)">

    結束注:使用JavaScript我已經逃避括號。