我可以将一个看起来像这样的字符串作为例子:
sometext<a title="Wink"><img src="http:\\www.seemstatic.com\images\transparent.png" class="emoWink"></a>somemore text<a title="Wink"><img src="http:\\www.seemstatic.com\images\transparent.png" class="emoWink"></a>endof text...
我有以下与上述字符串匹配的Javascript,并将其替换为:)
:
subject = subject.replace(/<a title="Smile"><img.*<\/a>/, ':)');
抓住它并不贪婪......它匹配两个事件而不是一个。
如何更改此代码以匹配第一次出现?
答案 0 :(得分:3)
你需要通过添加问号使其变得非贪婪吗?
// Greedy quantifiers
String match = find("A.*c", "AbcAbc"); // AbcAbc
match = find("A.+", "AbcAbc"); // AbcAbc
// Nongreedy quantifiers
match = find("A.*?c", "AbcAbc"); // Abc
match = find("A.+?", "AbcAbc"); // Abc
所以在你的情况下,像
subject = subject.replace(/<a title="Smile"><img.*?<\/a>/, ':)');
答案 1 :(得分:3)
请勿使用正则表达式执行此操作。你已经在使用jQuery了,所以你可以使用jQuery的DOM遍历方法:
yourString = $('<span>' + yourString + '</span>')
.find('a[title="Wink"]')
.replaceWith(';)')
.end()
.html();
答案 2 :(得分:0)
从技术上讲,这不是一个jquery问题,它是一个javascript问题,因为这里的替换是在String对象上。
你可以用subject.replace(/search/g, 'replacement');
g修饰符使其替换所有实例。
使用css选择器,使用jQuery方法可能会更好地解决问题:
例如。 $('.a[title=Smile]').replaceWith(';)')