尽管在正则表达式中使用了全局修饰符,但仅返回一项

Posted

技术标签:

【中文标题】尽管在正则表达式中使用了全局修饰符,但仅返回一项【英文标题】:Only one item returned despite global modifier use in Regex 【发布时间】:2012-06-24 02:38:07 【问题描述】:

我正在使用下面的 javascript 代码尝试在下面的 html 标记中提取 gallery-entry_ 之后的数字,但它没有给出所有匹配项,而是只返回第一个匹配项,尽管我在正则表达式中使用了 g 修饰符。知道为什么吗?

<script type="text/javascript">
    var _gallery = jQuery('ul.gallery').html();
    var _pat = /"gallery-entry_([0-9]+)"/gim;
    var _items   = _pat.exec(_gallery);
    alert('str='+_items[0]); // shows str="gallery-entry_1"
    alert('item #1='+_items[1]); // shows item #1=1
    alert('total='+_items.length); // shows total=2
</script>

这是标记:

<ul class="gallery">
<li id="gallery-entry_1"><a href="" title=""><img src=""   ></a></li>
    <li id="gallery-entry_2"><a href="" title=""><img src=""   ></a></li>
    <li id="gallery-entry_6"><a href="" title=""><img src=""   ></a></li>
    <li id="gallery-entry_10"><a href="" title=""><img src=""   ></a></li>
    <li id="gallery-entry_14"><a href="" title=""><img src=""   ></a></li>
    <li id="gallery-entry_22"><a href="" title=""><img src=""   ></a></li>
    <li id="gallery-entry_30"><a href="" title=""><img src=""   ></a></li>
    <li id="gallery-entry_31"><a href="" title=""><img src=""   ></a></li>         
</ul>

【问题讨论】:

【参考方案1】:

exec 总是返回一项。

您可以在循环中使用exec,或者改用String.prototype.match()

_gallery.match(_pat);

也就是说,使用正则表达式来获取所需数据似乎不是一个很好的选择。

如果您需要 ID,请使用 .map()

var _items = $('ul.gallery > li').map(function(i,el) 
                                          return el.id;
                                     ).toArray();

【讨论】:

我只需要 ID 中的数字进行排序。非常感谢您的回答!

以上是关于尽管在正则表达式中使用了全局修饰符,但仅返回一项的主要内容,如果未能解决你的问题,请参考以下文章

正则修饰符

正则修饰符

了解 Perl 正则表达式修饰符 /m 和 /s [重复]

正则表达式笔记——用正则表达式处理文本

正则表达式中的模式修饰符

js基础——正则表达式