我想将此文本拆分为故事中的所有不同字符,但您可以看到括号和括号中存有注释和其他数据:
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')
但似乎没有用。有什么想法吗?
答案 0 :(得分:1)
答案 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*
修剪前导和尾随空格)