我需要一个正则表达式来删除括号之间的最后一个表达式(也带括号)
来源:输入[某事] [something2] target:输入[something]
我试过这个,但它删除了所有两个:
"input[something][something2]".replace(/\[.*?\]/g, '');
答案 0 :(得分:3)
请注意\[.*?\]$
无法正常工作,因为它将匹配第一个 [
(因为正则表达式引擎从左到右处理字符串),然后将匹配字符串的所有其余内容,最后到]
。因此,它将匹配[something][something2]
中的input[something][something2]
。
您可以指定字符串锚点的结尾并使用[^\][]*
(匹配除[
和]
以外的零个或多个字符)而不是.*?
:
console.log(
"input[something][something2]".replace(/\[[^\][]*\]$/, '')
);

<强>详情:
\[
- 文字[
[^\][]*
- 除[
和]
以外的零个或多个字符]
- 文字]
$
- 字符串结尾另一种方法是在模式的开头使用.*
来抓取整行,捕获它,然后让它回溯以获得最后一个[...]
:
console.log(
"input[something][something2]".replace(/^(.*)\[.*]$/, '$1')
);
&#13;
此处,$1
是使用(.*)
子模式捕获的值的反向引用。但是,它会有所不同,因为它会返回字符串中的最后一个[
,然后包含括号的[
之后的所有内容都将被删除。
答案 1 :(得分:1)
请勿使用g
修饰符,并使用$
锚点
"input[something][something2]".replace(/\[[^\]]*\]$/, '');
答案 2 :(得分:0)
试试这段代码
var str = "Hello, this is Mike (example)";
alert(str.replace(/\s*\(.*?\)\s*/g, ''));