String.gsub - Prototype JavaScript 框架

Xunxin Prototype API

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",这会导致一个无限循环。