[英]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,'');
您只使用您感興趣的兩個字符創建一個字符集並進行全局替換。
兩個反斜杠產生一個反斜杠,因此您正在搜索“一個反斜杠,后跟由1
或right bracket
組成的字符類,然后您缺少一個right bracket
括號。
嘗試
str.replace(/\[1\]/g, '');
你到底想匹配什么?
如果您不轉義括號,它們將被視為字符類。 這個:
/[1\\]/
匹配 1 或反斜杠。 您可能只想用一個反斜杠來轉義它們:
/\[1\]/
但這也不匹配,因為您的字符串中沒有[1]
。
沒有人讓它變得簡單和正確:
str.replace(/[[\]]/g, '');
請注意使用字符類,左括號沒有轉義,右括號有單個反斜杠轉義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.