[英]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.