'use strict'; //最重要的就是这两个函数escapeDiacritic和escapeRegExp var escapeDiacritic = require('./escape_diacritic'); var escapeRegExp = require('./escape_regexp'); var rControl = /[\u0000-\u001f]/g; var rSpecial = /[\s~`!@#\$%\^&\*\(\)\-_\+=\[\]\{\}\|\\;:"'<>,\.\?\/]+/g;
module.exports = function(str, options){ if (typeof str !== 'string') thrownewTypeError('str must be a string!'); options = options || {};
var separator = options.separator || '-'; var escapedSep = escapeRegExp(separator);// 输出\-
var result = escapeDiacritic(str) // Remove control characters .replace(rControl, '') // Replace special characters .replace(rSpecial, separator) // Remove continous separators .replace(newRegExp(escapedSep + '{2,}', 'g'), separator) //n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。 // Remove prefixing and trailing separtors .replace(newRegExp('^' + escapedSep + '+|' + escapedSep + '+$', 'g'), '');