String.raw()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´9æ.
String.raw() éçã¡ã½ããã¯ããã³ãã¬ã¼ããªãã©ã«ã®ããã®ã¿ã°é¢æ°ã§ãããã®é¢æ°ã¯ Python ã®æååãªãã©ã«ã® r æ¥é è¾ã C# ã®æååãªãã©ã«ã® @ æ¥é è¾ã«ä¼¼ã¦ãã¾ãããã®é¢æ°ã¯ããã³ãã¬ã¼ããªãã©ã«ã®çã®æååå½¢å¼ãåå¾ããããã«ä½¿ç¨ããã¾ããã¤ã¾ããç½®æï¼${foo} ãªã©ï¼ã¯è¡ããã¾ãããã¨ã¹ã±ã¼ãï¼\n ãªã©ï¼ã¯å®è¡ããã¾ããã
試ãã¦ã¿ã¾ããã
// ããã¯ã¹ã©ãã·ã¥ãã¨ã¹ã±ã¼ãããã« Windows ãã¹ã使ç¨ãã夿°ã使
const filePath = String.raw`C:\Development\profile\about.html`;
console.log(`The file was uploaded from: ${filePath}`);
// äºæ³ãããçµæ: "The file was uploaded from: C:\Development\profile\about.html"
æ§æ
String.raw(strings)
String.raw(strings, sub1)
String.raw(strings, sub1, sub2)
String.raw(strings, sub1, sub2, /* â¦, */ subN)
String.raw`templateString`
弿°
strings-
æ´å½¢å¼ã®ãã³ãã¬ã¼ããªãã©ã«é åãªãã¸ã§ã¯ãããã¨ãã°
{ raw: ['foo', 'bar', 'baz'] }ãªã©ã§ããæååã®é å風ãªãã¸ã§ã¯ããå¤ã¨ãã¦æã¤rawããããã£ãæã£ã¦ãããªãã¸ã§ã¯ãã§ããã¹ãã§ãã sub1, â¦,subN-
ç½®æãããå¤ãå ¥ãã¾ãã
templateString-
ãã³ãã¬ã¼ããªãã©ã«ã§ãããªãã·ã§ã³ã§ç½®ææåå (
${...}) ãå«ã¿ã¾ãã
è¿å¤
æå®ããããã³ãã¬ã¼ããªãã©ã«ã®çã®æååå½¢å¼ã§ãã
ä¾å¤
TypeError-
第 1 弿°ã«
rawããããã£ãå«ã¾ãã¦ããªãã£ãããrawããããã£ãundefinedã¾ãã¯nullåºä¼ã£ããããå ´åã«çºçãã¾ãã
解説
ã»ã¨ãã©ã®å ´åãString.raw() ã¯ãã³ãã¬ã¼ããªãã©ã«ã¨ã¨ãã«ä½¿ç¨ããã¾ããåè¿°ã®æåã®æ§æã¯ãæ»
å¤ã«ä½¿ç¨ããã¾ãããJavaScript ã¨ã³ã¸ã³ãï¼ä»ã®ã¿ã°é¢æ°ã®ããã«ï¼é©åãªå¼æ°ã§å¼ã³åºãããã§ãã
String.raw() ã¯ãã³ãã¬ã¼ããªãã©ã«ã®å¯ä¸ã®çµã¿è¾¼ã¿ã¿ã°é¢æ°ã§ããæ¢å®ã®ãã³ãã¬ã¼ã颿°ã®ããã«åä½ããé£çµãè¡ãã¾ããé常㮠JavaScript ã³ã¼ãã§åå®è£
ãããã¨ãã§ãã¾ãã
è¦å:
String.raw ãç´æ¥ãèå¥ãã¿ã°ã¨ãã¦ä½¿ç¨ããªãã§ãã ããããã®å®è£
æ¹æ³ã«ã¤ãã¦ã¯èå¥ã¿ã°ã®æ§ç¯ãåç
§ãã¦ãã ããã
String.raw() ã raw ããããã£ã« length ããããã£ããªãããæ£ã§ãªã length ãæã¤ãªãã¸ã§ã¯ãã§å¼ã³åºãããå ´åãç©ºã®æåå "" ãè¿ãã¾ãããã substitutions.length < strings.raw.length - 1 ï¼ã¤ã¾ãããã¬ã¼ã¹ãã«ãã¼ãåããã ãã®ç½®æããªã - æ´å½¢å¼ã¿ã°ä»ããã³ãã¬ã¼ããªãã©ã«ã§ã¯èµ·ããããªãï¼å ´åãæ®ãã®ãã¬ã¼ã¹ãã«ãã¼ã¯ç©ºã®æååã§åãããã¾ãã
ä¾
>String.raw() ã®ä½¿ç¨
String.raw`Hi\n${2 + 3}!`;
// 'Hi\\n5!' ã§ãã'Hi' ã®æ¬¡ã®æåã¯
// æ¹è¡æåã§ã¯ãªãã
// '\' ããã³ 'n' 㯠2 ã¤ã®æåã§ãã
String.raw`Hi\u000A!`;
// 'Hi\\u000A!' ã§ããåæ§ã§ãä»åã¯
// \, u, 0, 0, 0, A, ã® 6 æåã§ãã
// ãã¹ã¦ã®ç¨®é¡ã®ã¨ã¹ã±ã¼ãæåã¯ç¡å¹ã§ãããã¯ã¹ã©ãã·ã¥ã
// åºåæååä¸ã«åå¨ãã¾ãã
// æååã® .length ããããã£ã調ã¹ãã¨ç¢ºèªã§ãã¾ãã
const name = "Bob";
String.raw`Hi\n${name}!`;
// 'Hi\\nBob!' ã§ããç½®ãæããå¦çããã¾ãã
String.raw`Hi \${name}!`;
// 'Hi \\${name}!' ã§ãããã«è¨å·ãã¨ã¹ã±ã¼ãããã¾ããè£éã¯è¡ããã¾ããã
String.raw 㨠RegExp ã®ä½¿ç¨
String.raw ãã³ãã¬ã¼ããªãã©ã«ã¨ RegExp() ã³ã³ã¹ãã©ã¯ã¿ã¼ãçµã¿åããããã¨ã§ã次ã®ãã¨ãå¯è½ã«ãªãã¾ãã
æ£è¦è¡¨ç¾ãªãã©ã«ã§ã¯ä½¿ç¨ã§ããªããåçãªé¨åãå«ãæ£è¦è¡¨ç¾ã使ããæ£è¦è¡¨ç¾ã®ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ãäºéã¨ã¹ã±ã¼ã (\\) ããå¿
è¦ãããã¾ããï¼éå¸¸ã®æååãªãã©ã«ã§ã¯ä½¿ç¨ã§ãã¾ããï¼ãããã¯ããã¡ã¤ã«ãã¹ã URL ãªã©ãã¹ã©ãã·ã¥ãå¤ãå«ã¾ãã¦ããæååã§ãå½¹ç«ã¡ã¾ãã
// String.raw ãã³ãã¬ã¼ãã使ç¨ããã¨ã URL ã¨ç
§åãããããªãèªã¿åãå¯è½ãªæ£è¦è¡¨ç¾ã使ã§ãã
const reRawTemplate = new RegExp(
String.raw`https://developer\.mozilla\.org/en-US/docs/Web/JavaScript/Reference/`,
);
// æ£è¦è¡¨ç¾ãªãã©ã«ã§åããã¨ãè¦ã¦ããã¨ãããããã®ãã©ã¯ã¼ãã¹ã©ãã·ã¥ã¯
// \/ ã§ç½®ãæãããã¾ãã
const reRegexpLiteral =
/https:\/\/developer\.mozilla\.org\/en-US\/docs\/Web\/JavaScript\/Reference\//;
// RegExp ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãåããªãªãã« \\. ã使ç¨ãã徿¥ã®æååãªãã©ã«ã§
// åããã¨ãè¨è¿°ããã¨ã次ã®ããã«ãªãã¾ãã
const reStringLiteral = new RegExp(
"https://developer\\.mozilla\\.org/en-US/docs/Web/JavaScript/Reference/",
);
// String.raw ã§ã¯ãåçãªé¨åãå«ããã¨ãã§ãã
function makeURLRegExp(path) {
return new RegExp(String.raw`https://developer\.mozilla\.org/${path}`);
}
const reDynamic = makeURLRegExp("en-US/docs/Web/JavaScript/Reference/");
const reWildcard = makeURLRegExp(".*");
èå¥ã¿ã°ã®æ§ç¯
å¤ãã®ãã¼ã«ã¯ãç¹å®ã®ååã§ã¿ã°ä»ãããããªãã©ã«ãç¹å¥æ±ããã¾ãã
// ãã©ã¼ããã¿ã¼ã«ãã£ã¦ã¯ããã®ãªãã©ã«ã®ã³ã³ãã³ãã HTML ã¨ãã¦æ¸å¼åãã
const doc = html`<!doctype html>
<html lang="en-US">
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>`;
html ã¿ã°ãç´ æ´ã«å®è£
ããããã«ã¯ã次ã®ããã«ãã¾ãã
const html = String.raw;
ããã¯ãå®éã¯ãä¸è¨ã®ããã«åä½ãã¾ããããããString.raw 㯠"cooked" æååã§ã¯ãªããçã®æååãªãã©ã«ãé£çµããã®ã§ãã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã¯å¦çããã¾ããã
const doc = html`<canvas>\n</canvas>`;
// "<canvas>\\n</canvas>"
ã¿ã°ãç´ç²ã«ãã¼ã¯ã¢ããã®ããã®ãã®ã§ããªãã©ã«ã®å¤ã夿´ããªããããªãç´ç²ãªèå¥ã¿ã°ãã§ã¯ãããã¯æããã®ã§ã¯ãªãããããã¾ããã ãã®å ´åãã«ã¹ã¿ã ã¿ã°ã使ãã"cooked"ï¼ã¤ã¾ããã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ãå¦çãããï½ï¼ãªãã©ã«é
åã String.raw ã«æ¸¡ãã¦ãçã®æååã§ãããã®ããã«è¦ãããããã¨ãã§ãã¾ãã
const html = (strings, ...values) => String.raw({ raw: strings }, ...values);
// ãã©ã¼ããã¿ã¼ã«ãã£ã¦ã¯ããã®ãªãã©ã«ã®ã³ã³ãã³ãã HTML ã¨ãã¦æ¸å¼åãã
const doc = html`<canvas>\n</canvas>`;
// "<canvas>\n</canvas>"; "\n" ãæ¹è¡æåã«ãªã
æåã®å¼æ°ã¯ raw ããããã£ãæã¤ãªãã¸ã§ã¯ãã§ããã®å¤ã¯ãã³ãã¬ã¼ããªãã©ã«ã®åºåãããæååã表ãé
å風ãªãã¸ã§ã¯ãï¼length ããããã£ã¨æ´æ°ã®ã¤ã³ããã¯ã¹ãæã¤ï¼ã§ãããã¨ã«æ³¨æãã¦ãã ãããæ®ãã®å¼æ°ã¯ç½®ãæãç¨ã§ããraw ã®å¤ã¯é
å風ãªãã¸ã§ã¯ãã§ããã°ä½ã§ãè¯ãã®ã§ãæååã§ãã£ã¦ãæ§ãã¾ãããä¾ãã°ã 'test' 㯠['t', 'e', 's', 't'] ã¨ãã¦æ±ããã¾ãã以ä¸ã¯ `t${0}e${1}s${2}t` ã¨ç価ã§ãã
String.raw({ raw: "test" }, 0, 1, 2); // 't0e1s2t'
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.raw> |