簡體   English   中英

如何在 RegExp javascript 中放置 [](方括號)?

[英]How can I put [] (square brackets) in RegExp javascript?

我正在嘗試這個:

str = "bla [bla]";
str = str.replace(/\\[\\]/g,"");
console.log(str);

而且替換不起作用,我做錯了什么?

更新:我正在嘗試刪除字符串中的任何方括號,奇怪的是,如果我這樣做了

replace(/\[/g, '')
replace(/\]/g, '')

它有效,但是
replace(/\\[\\]/g, '');
沒有。

它應該是:

str = str.replace(/\[.*?\]/g,"");

您不需要雙反斜杠 (\\),因為它不是字符串而是正則表達式語句,如果您從字符串構建正則表達式,則確實需要雙反斜杠 ;)。

它也從字面上解釋了 1(不匹配)。 使用.*表示方括號之間的任何值。

新的 RegExp 字符串構建版本將是:

str=str.replace(new RegExp("\\[.*?\\]","g"),"");

更新:僅刪除方括號:

str = str.replace(/\[(.*?)\]/g,"$1");

您上面的代碼不起作用,因為它試圖匹配“[]”(順序不允許任何東西)。 我們可以通過非貪婪的組匹配( (.*?) )方括號之間的內容來解決這個問題,並使用反向引用( $1 )進行替換。

更新 2:刪除多個方括號

str = str.replace(/\[+(.*?)\]+/g,"$1");
// bla [bla] [[blaa]] -> bla bla blaa
// bla [bla] [[[blaa] -> bla bla blaa

請注意,這與打開/關閉數量不匹配,只是刪除所有順序打開和關閉。 此外,如果連續括號有分隔符(空格等),它將不匹配。

您必須轉義括號,例如\\[\\] 查看http://regexpal.com/ 它非常有用:)

要替換字符串中的所有括號,這應該可以完成以下工作:

str.replace(/\[|\]/g,'');

我希望這有幫助。
赫里斯托

這是一個微不足道的例子,但對我有用。 您必須轉義每個方括號,然后將這些方括號括在方括號表達式中以捕獲所有實例。

 const stringWithBrackets = '[]]][[]]testing][[]]['; const stringWithReplacedBrackets = stringWithBrackets.replace(/[\\[\\]]/g, ''); console.log(stringWithReplacedBrackets);

我在處理一個字符類中的方括號轉義時偶然發現了這個問題,該字符類旨在用於需要存在特殊字符的密碼驗證。

注意雙重轉義:

var regex = new RegExp('[\\\\]]');

作為@rudu提到,這種表達一個字符串中,因此必須進行雙重轉義。 請注意,引用類型(單/雙)在這里不相關。

這里是一個字符類,對所有特殊字符的測試我的鍵盤上找到的用方括號的例子:

var regex = new RegExp('[-,_,\',",;,:,!,@,#,$,%,^,&,*,(,),[,\\],\?,{,},|,+,=,<,>,~,`,\\\\,\,,\/,.]', 'g')

以下情況如何?

str = "bla [bla]";

str.replace(/[[\\]]/g,'');

您只使用您感興趣的兩個字符創建一個字符集並進行全局替換。

兩個反斜杠產生一個反斜杠,因此您正在搜索“一個反斜杠,后跟由1right bracket組成的字符類,然后您缺少一個right bracket括號。

嘗試

str.replace(/\[1\]/g, '');

你到底想匹配什么?

如果您不轉義括號,它們將被視為字符類。 這個:

/[1\\]/

匹配 1 或反斜杠。 您可能只想用一個反斜杠來轉義它們:

/\[1\]/

但這也不匹配,因為您的字符串中沒有[1]

沒有人讓它變得簡單和正確:

str.replace(/[[\]]/g, '');

請注意使用字符類,左括號沒有轉義,右括號有單個反斜杠轉義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM