簡體   English   中英

JavaScript中奇怪的RegExp行為

[英]Strange RegExp behavior in JavaScript

我需要捕獲%{string}每個%{string}序列。 我創建了一個RegExp: /[^%]*(%{[^}]+})?/g ,它可以在Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}上的字符串Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer} consectetuer Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}上正常工作.com( https://regex101.com/r/aB2xL5/1 ),但在JS中不正確: var a='Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}'.match(/[^%]*(%{[^}]+})?/g);
console.log(a); //['Lorem %{ipsum}', ' dolor %{sit}', ' amet adipiscing aenean %{consectetuer}', '']
var a='Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}'.match(/[^%]*(%{[^}]+})?/g);
console.log(a); //['Lorem %{ipsum}', ' dolor %{sit}', ' amet adipiscing aenean %{consectetuer}', '']
var a='Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}'.match(/[^%]*(%{[^}]+})?/g);
console.log(a); //['Lorem %{ipsum}', ' dolor %{sit}', ' amet adipiscing aenean %{consectetuer}', '']
我在做什么錯?

我需要什么: Input string: 'abc %{def} ghi %{jkl}' Output array: ['%{def}','%{jkl}']

如評論中所述,不要訪問整個匹配項,即使在regex101上,它也包含超出您需要的內容,而是訪問匹配項的第一組。

為此,請使用Regex.prototype.exec而不是String.prototype.match

var regex=/[^%]*(%{[^}]+})?/g;
var data='Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}';
var result=[];
var match;
while (match = regex.exec(data)) {
  result.push(match[1]);  // match the first group of the result
}

編輯:我剛剛看到托馬斯的評論,這比這個解決方案要好得多。 我將其保留在此處,因為它確實可以解決您的問題並說明了如何捕獲組,但是您應該使用他的正則表達式。

暫無
暫無

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

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