我需要一个正则表达式来删除括号之间的最后一个表达式(也使用括号)
source:input [something] [something2] target:input [something]
我试过这个,但它删除了所有两个:
"input[something][something2]".replace(/\[.*?\]/g, '');
请注意,\[.*?\]$
将无法正常工作,因为它将匹配第一个[
(因为正则表达式引擎从左到右处理字符串),然后将匹配所有其余字符串直到其末尾的]
。因此,它将匹配[something][something2]
中的input[something][something2]
。
您可以指定字符串锚点的结尾并使用[^\][]*
(匹配除[
和]
之外的零个或多个字符)而不是.*?
:
console.log(
"input[something][something2]".replace(/\[[^\][]*\]$/, '')
);
细节:
\[
- 文字[
[^\][]*
- 除了[
和]
之外的零个或多个字符]
- 文字]
$
- 字符串的结尾另一种方法是在模式的开头使用.*
来抓住整条线,捕获它,然后让它回溯以获得最后的[...]
:
console.log(
"input[something][something2]".replace(/^(.*)\[.*]$/, '$1')
);
在这里,$1
是对(.*)
子模式捕获的值的反向引用。但是,它会有所不同,因为它将返回字符串中的最后一个[
,然后所有包含括号的[
将被删除。
不要使用g
修饰符,并使用$
锚点:
"input[something][something2]".replace(/\[[^\]]*\]$/, '');
试试这段代码
var str = "Hello, this is Mike (example)";
alert(str.replace(/\s*\(.*?\)\s*/g, ''));