2014-10-19 47 views
0

我寫一個JavaScript函數(無jQuery的),這將收到一個字符串的下列格式之一:如何在JavaScript中檢測並解析這些字符串格式之一?

  1. [布拉赫] [閱讀] [胡說] [可選嗒嗒]
  2. [布拉赫]閱讀[布拉赫]可選等等

我要挑「閱讀」串出的休息。 「可選的等等」位可能存在也可能不存在(以及第一種情況下隨附的方括號),但它們應該沒有關係。關於如何編寫一個這樣做的函數的任何想法?

+0

項目的陣列上分割字符串你是說要讀該位將始終[胡說]包圍?即。 [blah]我想準備好的位[blah] – 2014-10-19 01:28:30

+0

@ net.uk.sweet是的。這是確切的格式。只有括號內的內容發生變化。假設Blah內容中不會有方括號。 – Antrikshy 2014-10-19 01:29:09

回答

1

註冊精通將做的工作:

var a = "[Blah] [Read this] [Blah] [Optional blah]"; 
var b = "[Blah] Read this [Blah] Optional blah"; 
var text1 = a.match(/\[[^\]]+\]\s*\[*([^\]\[]+)\]*\s*\[[^\]]+\]\s*(\[*[^\]]+\]*)*/)[1].trim(); 
var text2 = b.match(/\[[^\]]+\]\s*\[*([^\]\[]+)\]*\s*\[[^\]]+\]\s*(\[*[^\]]+\]*)/)[1].trim(); 

console.log(text1); // "Read this" 
console.log(text2); // "Read this" 

EDIT1 如果你想知道你有哪一種格式:

var a = "[Blah] [Read this] [Blah] [Optional blah]"; 
var b = "[Blah] Read this [Blah] Optional blah"; 
var text1 = a.match(/\[[^\]]+\]\s*(\[*([^\]\[]+)\]*)\s*\[[^\]]+\]\s*(\[*[^\]]+\]*)*/); 
var text2 = b.match(/\[[^\]]+\]\s*(\[*([^\]\[]+)\]*)\s*\[[^\]]+\]\s*(\[*[^\]]+\]*)/); 
var text1_value = text1[2].trim(); 
var text2_value = text2[2].trim(); 
var text1_is_A_format = (/\[[^\]]+\]/).test(text1[1]); 
var text2_is_A_format = (/\[[^\]]+\]/).test(text2[1]); 

console.log(text1_is_A_format); // true 
console.log(text1_value); // "Read this" 
console.log(text2_is_A_format); // false 
console.log(text2_value); // "Read this" 

(我加了一個()圍繞「[閱讀] 「並檢查是否存在[]

編輯2

我們需要的項目

var a = "[Blah1] [Read this2] [Blah3] [Optional blah4]"; 
var re = new RegExp('(\\]\\s*\\[|\\s+\\[|\\]\\s+|\\[|\\])','g'); // Create reg exp (will be used 2 times) 
var b = a.split(re); // Split array on every match 
for(var i = b.length-1; i >= 0; i--){ // remove useless array items 
// We are making a count down for because we remove items from the array 
    if(b[i].length == 0 || b[i].match(re)) 
     b.splice(i, 1); 
} 
console.log(b); // Print : Array [ "Blah1", "Read this2", "Blah3", "Optional blah4" ] 
+0

謝謝。這工作完美。我想我應該繼續學習RegExp。是否有可能解釋像這樣的元素之間可能缺失的空間? [Blah] [閱讀] [Blah] [可選的等等]。此外,有些空間可能存在,有些可能不在任何字符串中。 – Antrikshy 2014-10-19 17:28:29

+0

我已經做了。 '\ s'是一個空格,'\ s *'是1或者沒有空格,並且最後的修剪從沒有[]的情況中刪除空格。如果字符串中有空格,請使用'.replace'刪除它們。 – GramThanos 2014-10-19 21:54:16

+0

已在答案上加了。 – GramThanos 2014-10-19 22:15:29

相關問題