[英]“String.replace” does not work for unicode notations
我希望 function buildAllKindsOfSpaceCharactersSetExpression
将取代\\u{2002}\\u{2003}\\u{2004}\\u{2005}\\u{2006}\\u{2007}\\u{2008}\\u{2009}
到\\u{2002}-\\u{2009}
。 为什么它没有发生?
enum SpaceSymbolsRegularExpressionUnicodeNotations {
regularSpace = "\\u{0020}",
noBreakSpace = "\\u{00A0}",
enSpace = "\\u{2002}",
emSpace = "\\u{2003}",
threePerEmSpace = "\\u{2004}",
forPerEmSpace = "\\u{2005}",
sixPerEmSpace = "\\u{2006}",
figureSpace = "\\u{2007}",
punctuationSpace = "\\u{2008}",
thinSpace = "\\u{2009}",
hairSpace = "\\u{200A}",
zeroWidthSpace = "\\u{200B}",
ideographicSpace = "\\u{3000}",
zeroWithNoBreakSpace = "\\u{FEFF}",
characterTabulation = "\\u{0009}"
}
function buildAllKindsOfSpaceCharactersSetExpression(
exceptions: Array<SpaceSymbolsRegularExpressionUnicodeNotations> = []
): string {
const desiredSpacesSet: Array<string> = [];
for (const space of Object.values(SpaceSymbolsRegularExpressionUnicodeNotations)) {
if (!exceptions.includes(space)) {
desiredSpacesSet.push(`\\${space}`);
}
}
return `[${Object.values(desiredSpacesSet).join("")}]`
.replace(
"\\u{2002}\\u{2003}\\u{2004}\\u{2005}\\u{2006}\\u{2007}\\u{2008}\\u{2009}",
"\\u{2002}-\\u{2009}"
);
}
console.log(buildAllKindsOfSpaceCharactersSetExpression()); // [\\u{0020}\\u{00A0}\\u{2002}\\u{2003}\\u{2004}\\u{2005}\\u{2006}\\u{2007}\\u{2008}\\u{2009}\\u{200A}\\u{200B}\\u{3000}\\u{FEFF}\\u{0009}]
作品:
return `[${Object.values(desiredSpacesSet).join("")}]`
.replace(
"\\u{2002}",
"FOO"
);
不工作!
return `[${Object.values(desiredSpacesSet).join("")}]`
.replace(
"\\u{2002}\\u{00A0}",
"FOO"
);
作品:
return `[${Object.values(desiredSpacesSet).join("")}]`
.replace(
"\\u{2002}\\",
"FOO"
);
不工作!
return `[${Object.values(desiredSpacesSet).join("")}]`
.replace(
"\\u{2002}\\u",
"FOO"
);
发现错误:
desiredSpacesSet.push(`\\${space}`);
这里\\
不是必需的。
而且,正如@zerkms 提示的那样,
desiredSpacesSet.push(space);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.