无法使正则表达式起作用

时间:2015-10-13 13:29:39

标签: javascript regex

var textoNotes = "e|-----------------|B|-----------------|G|-----------------|D|-----------------|A|-----------------|E|3-3-3-3-3-3-3-3-3|";

var filterChords = /(\(|[^(e|B|G|D|A|E)|]+|\))/g;

var arr = filterChords.exec(textoNotes);

返回:

arr[0] = -----------------
arr[1] = -----------------

但是,这就是我想要的:

arr[0] = -----------------
arr[1] = -----------------
arr[2] = -----------------
arr[3] = -----------------
arr[4] = -----------------
arr[5] = 3-3-3-3-3-3-3-3-3

谢谢大家,在此之后我想让每个值都有不同的价值。

4 个答案:

答案 0 :(得分:1)

请注意,当您尝试在字符类中使用组时,正则表达式出现异常。在(\(|[^(e|B|G|D|A|E)|]+|\))中,您有3种选择:

1)\(匹配文学作品(  2)[^(e|B|G|D|A|E)|]+匹配除(e以外的1个或多个字符...  3)\)匹配文字)

您可以使用以下正则表达式:

[eBGDAE]\|[^|]+\|

请参阅regex demo

正则表达式:

  • [eBGDAE] - 匹配范围内的1个字母
  • \| - 匹配文字|
  • [^|]+ - 除|
  • 以外的1个或多个字符
  • \| - 1个文字|

请注意,为了确保您在开头匹配1个字母,您可以使用\b字边界:

\b[eBGDAE]\|[^|]+\|

JS片段:

var re = /\b[eBGDAE]\|[^|]+\|/g; 
var str = 'e|-----------------|B|-----------------|G|-----------------|D|-----------------|A|-----------------|E|3-3-3-3-3-3-3-3-3|';
var res = [];
 
while ((m = re.exec(str)) !== null) {
    res.push(m[0]);    
    document.getElementById("r").innerHTML += m[0] + "<br/>";
}
<div id="r"/>

res将包含所需值的数组,document...仅用于演示。

答案 1 :(得分:0)

你的正则表达式与你想要的不匹配。我会尝试使用下面的内容(假设我正确理解你的问题,因为它有点不清楚)。

text.match(/[e|B|G|D|A|E]\|(.+)\|/g);

str.match()将输出一组值。

测试正则表达式的好地方是http://www.regexr.com或其他类似网站。

答案 2 :(得分:0)

你为什么不试试这个:

text.match(/[^\|eBGDAE]+/g);

哪个匹配任何不在此列表中的字符流,包括管道?

答案 3 :(得分:0)

所以|是你应该逃避的特殊字符之一,它存在于[]之外;

<script>
var textoNotes = "e|-----------------|B|-----------------|G|-----------------|D|-----------------|A|-----------------|E|3-3-3-3-3-3-3-3-3|";
var filterChords = /[eBGDAE]\|[^eBGDAE|]+\|/g;
var arr;
while (arr = filterChords.exec(textoNotes)) {
    alert(arr);
}
</script>