使用Javascript正则表达式删除字符串末尾的方括号之间的文本

问题描述 投票:1回答:3

我需要一个正则表达式来删除括号之间的最后一个表达式(也使用括号)

source:input [something] [something2] target:input [something]

我试过这个,但它删除了所有两个:

"input[something][something2]".replace(/\[.*?\]/g, '');
javascript regex
3个回答
3
投票

请注意,\[.*?\]$将无法正常工作,因为它将匹配第一个[(因为正则表达式引擎从左到右处理字符串),然后将匹配所有其余字符串直到其末尾的]。因此,它将匹配[something][something2]中的input[something][something2]

您可以指定字符串锚点的结尾并使用[^\][]*(匹配除[]之外的零个或多个字符)而不是.*?

console.log(
   "input[something][something2]".replace(/\[[^\][]*\]$/, '')
);

细节:

  • \[ - 文字[
  • [^\][]* - 除了[]之外的零个或多个字符
  • ] - 文字]
  • $ - 字符串的结尾

另一种方法是在模式的开头使用.*来抓住整条线,捕获它,然后让它回溯以获得最后的[...]

console.log(
   "input[something][something2]".replace(/^(.*)\[.*]$/, '$1')
);

在这里,$1是对(.*)子模式捕获的值的反向引用。但是,它会有所不同,因为它将返回字符串中的最后一个[,然后所有包含括号的[将被删除。


1
投票

不要使用g修饰符,并使用$锚点:

"input[something][something2]".replace(/\[[^\]]*\]$/, '');

0
投票

试试这段代码

var str = "Hello, this is Mike (example)";

alert(str.replace(/\s*\(.*?\)\s*/g, ''));
© www.soinside.com 2019 - 2024. All rights reserved.