.replacement()正则表达式问题

.replace() regex question

本文关键字:问题 正则表达式 replacement      更新时间:2023-09-26

我可以有一个字符串,例如:

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>/, ':)');

问题是它不贪婪。。。它匹配两种情况,而不是仅匹配一种情况。

如何更改此代码以仅匹配第一次出现的代码?

您需要通过添加问号使其不贪婪吗?

// 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>/, ':)');

不要使用regex执行此操作。您已经在使用jQuery,因此可以使用jQuery的DOM遍历方法:

yourString = $('<span>' + yourString + '</span>')
                 .find('a[title="Wink"]')
                     .replaceWith(';)')
                 .end()
                 .html();

从技术上讲,这不是一个jquery问题,而是一个javascript问题,因为这里的替换是在String对象上。

你可以贪婪地用subject.replace(/search/g, 'replacement'); 替换

g修饰符使其替换所有实例。

不过,使用css选择器,使用jQuery方法可能会更好地解决您的问题:例如$('.a[title=Smile]').replaceWith(';)')