Javascript – return string tussen vierkante haken

Ik hoef alleen de tekst tussen vierkante haken in een string terug te geven. Ik heb de volgende regex, maar dit geeft ook de vierkante haken terug:

var matched = mystring.match("\\[.*]");

Een string zal altijd maar één set vierkante haken bevatten, bijvoorbeeld:

Some text with [some important info]

Ik wil dat de overeenkomst ‘belangrijke informatie’ bevat, in plaats van de ‘[sommige belangrijke informatie]’ die ik momenteel krijg.


Antwoord 1, autoriteit 100%

Gebruik groepering. Ik heb een ?toegevoegd om de overeenkomende “ongemoedig” te maken, omdat dit waarschijnlijk is wat je wilt.

var matches = mystring.match(/\[(.*?)\]/);
if (matches) {
    var submatch = matches[1];
}

Antwoord 2, autoriteit 12%

Omdat javascript geen opnames ondersteunt, moet je er omheen hacken. Overweeg dit alternatief dat de tegenovergestelde benadering hanteert. In plaats van vast te leggen wat binnen de haakjes staat, verwijder dan wat er buiten staat. Aangezien er maar één set haakjes zal zijn, zou het prima moeten werken. Ik gebruik deze techniek meestal om voorloop- en volgspaties te verwijderen.

mystring.replace( /(^.*\[|\].*$)/g, '' );

Antwoord 3, autoriteit 8%

Als u tekst tussen twee aangrenzende vierkante haken wilt openen en sluiten, kunt u het volgende patroon gebruiken:

\[([^\][]*)]
(?<=\[)[^\][]*(?=])

Bekijk de regex-demo #1en regex-demo #2. OPMERKING: de tweede regex met lookarounds wordt ondersteund in JavaScript-omgevingen die ECMAScript 2018-compatibel zijn. Als oudere omgevingen moeten worden ondersteund, gebruik dan de eerste regex met een capture-groep.

Details:

  • (?<=\[)– een positieve lookbehind die overeenkomt met een locatie die onmiddellijk wordt voorafgegaan door een teken [(dit vereist een [teken dat onmiddellijk links van de huidige positie moet verschijnen)
  • [^\][]*– nul of meer (*) tekens anders dan [en ](merk op dat de ([^\][]*)-versie hetzelfde patroon is dat vastgelegdis in een capture-groep met ID 1)
  • (?=])– een positieve vooruitblik die overeenkomt met een locatie die onmiddellijk wordt gevolgd door een teken ](dit vereist een ]char onmiddellijk rechts van de huidige regex-indexlocatie).

Nu kun je in code het volgende gebruiken:

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"]

Snippet uitvouwen


Antwoord 4, autoriteit 4%

Heb je geprobeerd de ouders vast te leggen:

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

Dit zou het patroon tussen de haakjes moeten retourneren als een vastgelegde overeenkomst in de geretourneerde array


Antwoord 5, autoriteit 4%

Gebruik gewoon replaceen map

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

Antwoord 6, Autoriteit 2%

je kunt het niet. JavaScript ondersteunt de lookhouse niet.

U moet ofwel een Capture-groep gebruiken of de beugels uitschakelen.

Trouwens, je wilt waarschijnlijk geen hebberige .*in je regex. Probeer dit:

"\\[.*?]"

of beter, dit:

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

Other episodes