在Javascript中替换括号之间的分号

时间:2013-12-12 19:59:21

标签: javascript regex string

我想将此文本拆分为故事中的所有不同字符,但您可以看到括号和括号中存有注释和其他数据:

var string = "Batman [Bruce Wayne; also as Two-Face]; Joker; Ra's al Ghul; Mr. Freeze; Killer Moth; Poison Ivy; Mad Hatter; Spook; Scarecrow; Captain Stingaree; Cavalier; Cluemaster; Signalman; Batman [Jerry Randall]; Tweedle Dum; Tweedle Dee; Catwoman; Riddler; Lex Luthor; Superman; Two-Face; Commissioner Jim Gordon; Arkham Asylum";

通常你可以像这样分割这个字符串:

string.split(';')

你会非常接近,但有些情况下括号或括号之间会有分号。因此,在这种情况下,“蝙蝠侠”分为两个字符。

问题: 如何在拆分之前删除括号和括号内的分号?

我尝试了这样的正则表达式:

characters.replace('/(\[[^)]*);([^)]*\])/', '$1$2')

但似乎没有用。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

此模式应该/;(?=((?!\[).)*?\])/g demo

匹配括号/;(?=(((?!\]).)*\[)|[^\[\]]*$)/g Demo

之外的分号

答案 1 :(得分:0)

你在这里:

/(\[.*?);(.*?\])/g

示例:

var string = "Batman [Bruce Wayne; also as Two-Face]; Joker; Ra's al Ghul; Mr. Freeze; Killer Moth; Poison Ivy; Mad Hatter; Spook; Scarecrow; Captain Stingaree; Cavalier; Cluemaster; Signalman; Batman [Jerry Randall]; Tweedle Dum; Tweedle Dee; Catwoman; Riddler; Lex Luthor; Superman; Two-Face; Commissioner Jim Gordon; Arkham Asylum";
string.replace(/(\[.*?);(.*?\])/g, '$1$2')

"Batman [Bruce Wayne also as Two-Face]; Joker; Ra's al Ghul; Mr. Freeze; Killer Moth; Poison Ivy; Mad Hatter; Spook; Scarecrow; Captain Stingaree; Cavalier; Cluemaster; Signalman; Batman [Jerry Randall]; Tweedle Dum; Tweedle Dee; Catwoman; Riddler; Lex Luthor; Superman; Two-Face; Commissioner Jim Gordon; Arkham Asylum"

答案 2 :(得分:0)

你可以删除它们或只是以同样的方式保护括号内的那些......

使用不会自然发生的任意字符串替换要保护的半冒号:

string.replace(/([\[\(][^\[\(\]\)]+);([^\[\(\]\)]+[\]\)])/g,'$1~~$2')

将剩余的分号替换为不会自然发生的不同任意字符串(并清理这些空格):

.replace(/; */g,"^^")

将受保护的字符串切换回分号:

.replace(/~~/g,";")

拆分你剩下的东西:

.split("^^");

......那可以给你想要的结果。

答案 3 :(得分:0)

如果您使用此代码,则无需在拆分前删除方括号内的;

result = string.split(/\s*;\s*(?![^[]*])/);

(我添加\s*修剪前导和尾随空格)

相关问题