2017-08-31 137 views
1

在正則表達式中我真的很糟糕,我不知道該怎麼做。我想在()或[](包括方括號)內捕捉任何內容,之後什麼都沒有。例如,如果我鍵入[this is text]我希望它返回完全。另外我有一個json充滿了用戶類型的術語。如果該術語不在json上,則不應該打印。這是與正則表達式有關的代碼片段。正則表達式 - 在圓括號和括號內捕獲任何東西

let sf_re = /(?:(,)\s+|\s+(xx)\s+)|\+|(,)/  
     if (document.querySelector(".images")){ 
      document.querySelector(".images").innerHTML = "" 
      for(var i=0;i<item.length;i++){ 
       if(/(\[(.*?)\]|\((.*?)\))/.test(item[i])){ 
        let text = item[i] 
        let note = document.createElement("span") 
        note.innerHTML = String(text) 
        document.querySelector(".images").appendChild(note) 
       } 

Here is an example of what happens

唯一令應顯示爲[cat cat cat]。 「狗」不應該出現,因爲它不在我的名單上。在regexr中,它似乎工作正常。我不知道要添加什麼。

編輯:我認爲我原來的文章沒有足夠的信息。用戶使用.split()鍵入輸入欄,該輸入欄被拆分爲一個數組。我的主要目標是允許用戶添加小段文字。例如,如果我的json有術語「貓」,「狗」和「豬」,並且用戶鍵入這些術語,那麼它將返回一些內容。 This is what I get using the suggestions below.注意「f」第一次如何返回箭頭,但不是第二次。我不知道爲什麼會發生這種情況。我可能會使用「匹配」錯誤。我嘗試這樣做,我得到一個錯誤「無法讀取的未定義的屬性」:

let regex = /(\[(.*?)\]|\((.*?)\))/ 
if (document.querySelector(".images")){ 
      document.querySelector(".images").innerHTML = "" 
      for(var i=0;i<item.length;i++){ 
       if(item[i].match(regex)[0]){ 
        let text = item[i] 
        let note = document.createElement("span") 
        note.innerHTML = String(text) 
        document.querySelector(".images").appendChild(note) 
       } 
+0

'另外我有一個JSON充滿了用戶類型的術語......然後使用JSON解析器,而不是原始正則表達式。 –

回答

0

另外我有一個JSON全部條款的用戶類型。如果該術語不在json上,則不應該打印。

您可以使用

obj.hasOwnProperty(prop); 

這將讓你知道對象是否包含指定的道具。下面是一個例子 -

var x = { 
 
    y: 10 
 
}; 
 
alert(x.hasOwnProperty("y")); //true 
 
alert(x.hasOwnProperty("z")); //false

0

這裏有兩個簡單的regexs就可以使用。一個匹配括號,另一個匹配括號。

第三個是檢查兩者之一的組合。但是,請記住,您只能使用[ ]()中的每一個。如果你接受多種類型的任何一種,那麼正則表達式會中斷,因爲它會返回最外層字符之間的所有字符。

使用match可以返回一個數組,所以如果你知道你只能得到一個結果,那麼你可以抓取第一個元素,比如結果和result2。如果不是,你可以像result3那樣處理結果數組。

const regex = /\[.*\]/ 
 
const regex2 = /\(.*\)/ 
 
const regex3 = /(\[.*\])|(\(.*\))/g 
 

 
const result = ("[cat cat cat]dog").match(regex3)[0]; 
 
const result2 = ("banana(cat cat)horse").match(regex3)[0]; 
 
const result3 = ("alfred[cat cat cat]banana(dog dog)").match(regex3); 
 

 
console.log(result); //[cat cat cat] 
 
console.log(result2); //(cat cat) 
 
console.log(result3); // [ '[cat cat cat]', '(dog dog)' ]

.字符匹配任何東西,和*將重複0次或更多次。根據需要,\字符可用於轉義[],()(以及任何其他特殊的正則表達式字符)。末尾的g將檢查整個字符串。

希望這應該足以讓你不被卡住。

0

正則表達式是[\[|\(](.*)[\]\)]

說明:讀 '[' 或 '(',然後讀取任何事情,直到有一個 ']' 或 ')'

var regexp = /[\[|\(](.*)[\]\)]/; 
 
var match = ("[cat cat cat]dog").match(regexp); 
 
console.log(match[1]);

相關問題