繁体   English   中英

“String.replace”不适用于 unicode 符号

[英]“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM