簡體   English   中英

Javascript - 在方括號之間返回字符串

[英]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 );

您是否嘗試捕獲括號:

("\\[(.*)]");

這應該將括號內的模式作為返回數組中的捕獲匹配返回

只需使用replacemap

"blabla (some info) blabla".match(/\((.*?)\)/g).map(b=>b.replace(/\(|(.*?)\)/g,"$1"))

你不能。 Javascript 不支持后視。

您必須使用捕獲組或修剪括號。

順便說一句,您可能不希望在正則表達式中使用貪婪的.* 試試這個:

"\\[.*?]"

或者更好的是,這個:

"\\[[^\\]]*]"

暫無
暫無

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

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