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
谢谢大家,在此之后我想让每个值都有不同的价值。
答案 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个字母,您可以使用\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>