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

时间:2017-06-23 10:03:37

标签: javascript regex

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

来源:输入[某事] [something2] target:输入[something]

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

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

3 个答案:

答案 0 :(得分:3)

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

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



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




<强>详情:

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

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

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

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

答案 1 :(得分:1)

请勿使用g修饰符,并使用$锚点

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

答案 2 :(得分:0)

试试这段代码

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

alert(str.replace(/\s*\(.*?\)\s*/g, ''));