替换仅包含字母的括号外的任何内容

时间:2017-12-17 07:10:50

标签: javascript html regex

我的示例文本

[10.5]  : [G  D/F#]
[21.5]  : [D F G] => It's too late
[26.5]  : [D Em A] => It's now done

我想替换(删除)包含和弦名称的括号外的所有内容。

我知道如何选择/[^\[\]]+([a-zA-Z\#])/g

第一行选择

G  D/F#

第二行选择

D F G => It's too late

第三行选择

D Em A => It's now done

在那里,我想要输出(逐行逐行)

G  D/F#
D F G
D Em A

如何反转我的正则表达式,因此它应该选择[D F G]内的和弦名称替换外面的所有内容?

2 个答案:

答案 0 :(得分:3)

拆分它,第二个索引将有你想要的。在那里搜索括号。

perl -i -p -e 's/(?<!\x22|\x27)([A-Z][a-z0-9]++)(?!\s|,|\))/\L\1_/g; s/(_)+([A-Z])?/\L\1\2/g' file

答案 1 :(得分:3)

例如,您可以使用match与此正则表达式\[([A-Za-z\s\d#/]+)\]一起返回您要查找的值。

<强>解释

  • 匹配括号\[
  • 启动捕获组(
  • 将此范围内的字符匹配一次或多次[A-Za-z\s\d#/]+
  • 关闭捕获组)
  • 匹配右括号\]

var lines = [
    "[10.5]  : [G  D/F#]",
    "[21.5]  : [D F G] => It's too late",
    "[26.5]  : [D Em A] => It's now done",
    "[26.5]  : [A7/13] => text",
    "[26.5]  : [Asus4] => text",
    "[26.5]  : [Am6] => text"
];
for (var i = 0; i < lines.length; i++) {
    var pattern = /\[([A-Za-z\s\d#/]+)\]/;
    var result = lines[i].match(pattern)[1];
    console.log(result);
}