去掉字符串开头和结尾的方括号

8
我想把一个字符串开头和结尾的方括号去掉,如果它们存在的话。
[Just a string]
Just a string
Just a string [comment]
[Just a string [comment]]

应该得到以下结果

Just a string
Just a string
Just a string [comment]
Just a string [comment]

我尝试构建一个正则表达式,但是我没有正确地理解它,因为它没有查找位置:

string.replace(/[\[\]]+/g,'')

4
什么意思 [只是一个字符串[注释] - Wiktor Stribiżew
1
使用 ^$ 锚点。 - Matt Burland
@WiktorStribiżew 这是无效的,但会导致 Just a string [comment - user3142695
2
所以你可能也可以使用 string.replace(/^\[|]$/g, '') - bobble bubble
3个回答

10
string.replace(/^\[(.+)\]$/,'$1')
  • ^匹配字符串的开头。
  • $匹配字符串的结尾。
  • (.+)匹配两者之间的所有内容,并在最终字符串中报告。

使用这些正则表达式应该能解决问题。


1
console.log("[just a [string]".replace(/^\[(.+)\]$/,'$1')); 将返回 "just a [string" - Cerbrus
9
OP不想建立一个括号匹配器,只需要一个正则表达式来删除最后和第一组括号,如果两者都存在。请不要过度假设。 - blue112
3
@Cerbrus,我们只能根据问题发布者提供的定义来解决问题。而且在问题的评论中,他们已经说明输入本来就是无效的。 - Matt Burland
可靠的软件难道不应该能够处理无效输入吗?换句话说,它不应该检查无效输入吗? - Cerbrus
1
无论如何,这不会匹配"[word\nline]",因为.不能匹配所有内容。 - Wiktor Stribiżew
显示剩余3条评论

3

Blue112提供了一种解决方案,可以从的开头/结尾(如果两者都存在)中删除[]

要从字符串的开头/结尾(如果两者都存在)中删除[],您需要:

input.replace(/^\[([\s\S]*)]$/,'$1')

或者

input.replace(/^\[([^]*)]$/,'$1')

在JS中,要匹配包括换行符在内的任何符号,你可以使用[\s\S](或[\w\W][\d\D]),或者使用匹配任何非空字符的[^]

var s = "[word  \n[line]]";
console.log(s.replace(/^\[([\s\S]*)]$/, "$1"));


0

可能有更好的正则表达式来完成它,但基本的一个是:

var strs = [
  "[Just a string]",
  "Just a string",
  "Just a string [comment]",
  "[Just a string [comment]]"
];

var re = /^\[(.+)\]$/;
strs.forEach( function (str) {
  var updated = str.replace(re,"$1");
  console.log(updated);
});

正则表达式可视化工具


它与blue112的解决方案完全相同。 - Wiktor Stribiżew
1
这就是当你去拿咖啡然后回来回答时会发生的事情。 - epascarello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接