[英]Javascript - return string between square brackets
我只需要返回字符串中方括號內包含的文本。 我有以下正則表達式,但這也會返回方括號:
var matched = mystring.match("\\[.*]");
一個字符串將只包含一組方括號,例如:
Some text with [some important info]
我希望匹配包含“一些重要信息”,而不是我目前得到的“[一些重要信息]”。
使用分組。 我添加了一個?
使匹配“不貪婪”,因為這可能是您想要的。
var matches = mystring.match(/\[(.*?)\]/);
if (matches) {
var submatch = matches[1];
}
由於 javascript 不支持捕獲,因此您必須繞過它。 考慮這種采用相反方法的替代方案。 而是捕獲括號內的內容,刪除括號外的內容。 由於永遠只有一組括號,它應該可以正常工作。 我通常使用這種技術來去除前導和尾隨空格。
mystring.replace( /(^.*\[|\].*$)/g, '' );
要匹配兩個相鄰的左方括號和右方括號之間的任何文本,您可以使用以下模式:
\[([^\][]*)]
(?<=\[)[^\][]*(?=])
請參閱正則表達式演示 #1和正則表達式演示 #2 。 注意:在符合 ECMAScript 2018 標准的 JavaScript 環境中支持帶有環視的第二個正則表達式。 如果需要支持較舊的環境,請將第一個正則表達式與捕獲組一起使用。
詳情:
(?<=\\[)
- 匹配緊跟在[
字符之前的位置的正向后視(即這需要[
字符立即出現在當前位置的左側)[^\\][]*
- 除[
和]
之外的零個或多個 ( *
) 字符(注意([^\\][]*)
版本與捕獲到 ID 為 1 的捕獲組中的模式相同)(?=])
- 與緊跟在]
字符之后的位置匹配的正向前瞻(即,這需要一個]
字符立即出現在當前正則表達式索引位置的右側)。現在,在代碼中,您可以使用以下內容:
const text = "[Some text] ][with[ [some important info]"; console.log( text.match(/(?<=\\[)[^\\][]*(?=])/g) ); console.log( Array.from(text.matchAll(/\\[([^\\][]*)]/g), x => x[1]) ); // Both return ["Some text", "some important info"]
這是在循環中使用RegExp#exec
提取捕獲的子字符串的傳統方法:
var text = "[Some text] ][with[ [some important info]"; var regex = /\\[([^\\][]*)]/g; var results=[], m; while ( m = regex.exec(text) ) { results.push(m[1]); } console.log( results );
您是否嘗試捕獲括號:
("\\[(.*)]");
這應該將括號內的模式作為返回數組中的捕獲匹配返回
只需使用replace
和map
"blabla (some info) blabla".match(/\((.*?)\)/g).map(b=>b.replace(/\(|(.*?)\)/g,"$1"))
你不能。 Javascript 不支持后視。
您必須使用捕獲組或修剪括號。
順便說一句,您可能不希望在正則表達式中使用貪婪的.*
。 試試這個:
"\\[.*?]"
或者更好的是,這個:
"\\[[^\\]]*]"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.