mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-09 18:37:50 +00:00
Expand existing support for zero-width-joiners.
This commit is contained in:
29
lodash.js
29
lodash.js
@@ -142,36 +142,31 @@
|
|||||||
/** Used to match unescaped characters in compiled string literals. */
|
/** Used to match unescaped characters in compiled string literals. */
|
||||||
var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
|
var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
|
||||||
|
|
||||||
/** Used to compose `reStrSymbol` and `reWord`. */
|
/** Used to compose `reAdvSymbol`, `reStrSymbol`, and `reWord`. */
|
||||||
var rsAstralRange = '\\ud800-\\udfff',
|
var rsAstralRange = '\\ud800-\\udfff',
|
||||||
rsAstral = '[' + rsAstralRange + ']',
|
rsAstral = '[' + rsAstralRange + ']',
|
||||||
rsDigits = '\\d+',
|
rsDigits = '\\d+',
|
||||||
rsLowers = '[a-z\\xdf-\\xf6\\xf8-\\xff]+',
|
rsLowers = '[a-z\\xdf-\\xf6\\xf8-\\xff]+',
|
||||||
rsNonAstral = '[^' + rsAstralRange + ']',
|
rsNonAstral = '[^' + rsAstralRange + ']',
|
||||||
rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
|
rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
|
||||||
|
rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
|
||||||
rsUpper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]',
|
rsUpper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]',
|
||||||
rsZWJ = '\\u200d',
|
rsZWJ = '\\u200d',
|
||||||
rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
|
rsJoiner = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + '))*',
|
||||||
rsSurrPairs = rsSurrPair + '(?:' + rsZWJ + rsSurrPair + ')*';
|
rsSymbol = '(?:' + [rsNonAstral, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
|
||||||
|
|
||||||
/** Used to match code points from the astral planes. */
|
/** Used to match [zero-width joiners and code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
|
||||||
var reAstral = RegExp(rsAstral);
|
var reAdvSymbol = RegExp('[' + rsZWJ + rsAstralRange + ']');
|
||||||
|
|
||||||
/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
|
/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
|
||||||
var reStrSymbol = RegExp([
|
var reStrSymbol = RegExp(rsSymbol + rsJoiner, 'g');
|
||||||
rsNonAstral,
|
|
||||||
rsRegional,
|
|
||||||
rsSurrPairs,
|
|
||||||
rsAstral
|
|
||||||
].join('|'), 'g');
|
|
||||||
|
|
||||||
/** Used to match words to create compound words. */
|
/** Used to match words to create compound words. */
|
||||||
var reWord = RegExp([
|
var reWord = RegExp([
|
||||||
rsUpper + '+(?=' + rsUpper + rsLowers + ')',
|
rsUpper + '+(?=' + rsUpper + rsLowers + ')',
|
||||||
rsUpper + '?' + rsLowers,
|
rsUpper + '?' + rsLowers,
|
||||||
rsUpper + '+',
|
rsUpper + '+',
|
||||||
rsRegional,
|
'(?:' + rsRegional + '|' + rsSurrPair + ')' + rsJoiner,
|
||||||
rsSurrPairs,
|
|
||||||
rsDigits
|
rsDigits
|
||||||
].join('|'), 'g');
|
].join('|'), 'g');
|
||||||
|
|
||||||
@@ -1202,7 +1197,7 @@
|
|||||||
* @returns {number} Returns the string size.
|
* @returns {number} Returns the string size.
|
||||||
*/
|
*/
|
||||||
function stringSize(string) {
|
function stringSize(string) {
|
||||||
if (!(string && reAstral.test(string))) {
|
if (!(string && reAdvSymbol.test(string))) {
|
||||||
return string.length;
|
return string.length;
|
||||||
}
|
}
|
||||||
var result = reStrSymbol.lastIndex = 0;
|
var result = reStrSymbol.lastIndex = 0;
|
||||||
@@ -3647,7 +3642,7 @@
|
|||||||
chars = chars === undefined ? ' ' : (chars + '');
|
chars = chars === undefined ? ' ' : (chars + '');
|
||||||
|
|
||||||
var result = repeat(chars, nativeCeil(padLength / stringSize(chars)));
|
var result = repeat(chars, nativeCeil(padLength / stringSize(chars)));
|
||||||
return reAstral.test(chars)
|
return reAdvSymbol.test(chars)
|
||||||
? stringToArray(result).slice(0, padLength).join('')
|
? stringToArray(result).slice(0, padLength).join('')
|
||||||
: result.slice(0, padLength);
|
: result.slice(0, padLength);
|
||||||
}
|
}
|
||||||
@@ -10388,7 +10383,7 @@
|
|||||||
if (!string) {
|
if (!string) {
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
if (reAstral.test(string)) {
|
if (reAdvSymbol.test(string)) {
|
||||||
var strSymbols = stringToArray(string);
|
var strSymbols = stringToArray(string);
|
||||||
return strSymbols[0].toUpperCase() + strSymbols.slice(1).join('');
|
return strSymbols[0].toUpperCase() + strSymbols.slice(1).join('');
|
||||||
}
|
}
|
||||||
@@ -11128,7 +11123,7 @@
|
|||||||
string = baseToString(string);
|
string = baseToString(string);
|
||||||
|
|
||||||
var strLength = string.length;
|
var strLength = string.length;
|
||||||
if (reAstral.test(string)) {
|
if (reAdvSymbol.test(string)) {
|
||||||
var strSymbols = stringToArray(string);
|
var strSymbols = stringToArray(string);
|
||||||
strLength = strSymbols.length;
|
strLength = strSymbols.length;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user