gsub
gsub(pattern, replacement) -> string
将字符串中所有与 pattern
指定的模式匹配的值全部用 replacement
替换掉。replacement
可以是一个普通的字符串、一个回调函数或是一个
Template 字符串。pattern
可以是一个字符串或是一个正则表达式。
如果参数 replacement
是一个字符串,String#gsub
与 JavaScript 原生的
replace()
方法设置为全局匹配时具有相同的功能。
var mouseEvents = 'click dblclick mousedown mouseup mouseover mousemove mouseout';
mouseEvents.gsub(' ', ', ');
// -> 'click, dblclick, mousedown, mouseup, mouseover, mousemove, mouseout'
mouseEvents.gsub(/\s+/, ', ');
// -> 'click, dblclick, mousedown, mouseup, mouseover, mousemove, mouseout'
如果参数 replacement
是一个函数,当每次找到与指定模式匹配的值时,将会调用该函数,
并将匹配到的结果值传递给它,作为它唯一的参数。注意,这个参数是在当前 pattern
指定的模式上调用 match()
方法后返回的值,它是一个数组,第一个元素是与模式完整匹配的结果,
随后是在正则表达式中使用小括号界定的分组的匹配结果。
mouseEvents.gsub(/\w+/, function(match){
return 'on' + match[0].capitalize()
});
// -> 'onClick onDblclick onMousedown onMouseup onMouseover onMousemove onMouseout'
var markdown = '![a pear](/img/pear.jpg) ![an orange](/img/orange.jpg)';
markdown.gsub(/!\[(.*?)\]\((.*?)\)/, function(match){
return '<img alt="' + match[1] + '" src="' + match[2] + '" />';
});
// -> '<img alt="a pear" src="/img/pear.jpg"/> <img alt="an orange" src="/img/orange.jpg" />'
最后,如果参数是一个 Template 字符串,你可以使用 Ruby 创造的标记法访问
match()
方法返回的值:#{0}
表示数组的第一个元素,#{1}
表示第二个,依此类推。因此,使用这种方式重写前面的样例,代码会变得非常简单:
markdown.gsub(/!\[(.*?)\]\((.*?)\)/, '<img alt="#{1}" src="#{2}" />');
// -> '<img alt="a pear" src="/img/pear.jpg" /> <img alt="an orange" src="/img/orange.jpg" />'
如果你需要一个与 String#gsub
具有相同功能但不需要全局查找的方法,请使用 String#sub。
注意
请 不要 在正则表达式中使用标识 "g"
,这会导致一个无限循环。