2014-10-19 14 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

相关问题