原始字符串字面量

原始字符串字面量(raw string literal)可以横跨多行代码的字符串字面量不需要转义嵌入的双引号,像\t\n这种转义序列不按照转义序列的方式处理,而是按照普通文本的方式处理。如果像下面这样编写普通的字符串字面量,那么会收到一个编译器错误,因为字符串包含了未转义的引号:

string str = "Hello "World"!";    // Error! 

对于普通的字符串,必须转义双引号,如下所示:

string str = "Hello \"World\"!"; 

对于原始字符串字面量,就不需要转义引号了。原始字符串字面量以R"(开头,以)"结尾:

string str = R"(Hello "World"!)" 

原始字符串字面量可以跨越多行代码。例如,如果像下面这样编写普通的字符串字面量,那么会收到一个编译器错误,因为普通的字符串字面量不能跨越多行:

string str = "Line 1  
Line 2 with \t";    // Error! 

可使用如下原始字符串字面量来替代:

string str = R"(Line 1  
Line 2 with \t)"; 

这也说明,使用原始字符串字面量时, \t转义字符没有替换为实际的制表符字符,而是按照字面形式保存。将str写入控制台得到的输出如下所示:

Line 1  
Line 2 with \t 

因为原始字符串字面量以)"结尾,所以使用这个语法时,不能在字符串中嵌入)"。例如,下面的字符串是不合法的,因为在这个字符串中间包含了一个)"

string str = R"(The characters )" are embedded in this string)";    // Error! 

如果需要嵌入)",则需要使用扩展的原始字符串字面量语法,如下所示:

R"d-char-sequence(r-char-sequence)d-char-sequence" 

r-char-sequence是实际的原始字符串。d-char-sequence是可选的分隔符序列,原始字符串首尾的分隔符序列应该一致。分隔符序列最多能有16个字符。应选择未出现在原始字符串字面量中的序列作为分隔符序列。

上面的例子可以改用唯一的分隔符序列:

string str = R"-(The characters )" are embedded in this string)-"; 

在操作数据库查询字符串和正则表达式等字符串时,原始字符串字面量可以令程序的编写更加方便。

### JavaScript 正则表达式字符串字面量用法 在 JavaScript 中,正则表达式可以通过字符串字面量的形式创建。这种方式适用于正则表达式的内容固定不变的情况,因为它会在第一次使用时完成编译并缓存结果[^4]。 #### 使用字符串字面量创建正则表达式的语法 以下是通过字符串字面量创建正则表达式的标准写法: ```javascript const regex = /pattern/flags; ``` - `pattern` 是要匹配的模式,它可以包含字母、数字、特殊字符以及元字符。 - `flags` 是可选标志位,用于控制正则表达式的行为。常见的标志有: - `g`: 全局匹配 (global match)。 - `i`: 忽略大小写 (case-insensitive matching)。 - `m`: 多行匹配 (multiline matching)。 #### 示例代码展示 下面是一些具体的例子,演示如何利用字符串字面量构建和应用正则表达式。 ##### 示例 1: 基本匹配 此示例展示了如何查找字符串中是否存在指定子串。 ```javascript // 定义一个简单的正则表达式 const regex = /hello/i; // 测试目标字符串是否包含 'hello' console.log(regex.test("Hello, world!")); // 输出 true ``` 上述代码片段中,`regex.test()` 方法用来检测目标字符串是否满足给定的正则条件。这里的 `/hello/i` 表达式会忽略大小写差异[^3]。 ##### 示例 2: 提取特定部分 如果希望从复杂文本中提取某些信息,则可以借助 `.exec()` 或者其他方法实现。 ```javascript // 匹配电子邮件地址 const emailRegex = /[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/gi; // 输入一段含有多个邮箱地址的文字 const text = "Contact us at support@example.com or sales@example.org."; // 执行 exec 函数获取第一个匹配项 let result = emailRegex.exec(text); while (result !== null) { console.log(result[0]); // 输出找到的第一个邮件地址 result = emailRegex.exec(text); // 继续寻找下一个 } ``` 这里定义了一个较为复杂的正则表达式 `[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}` 来识别电子信箱格式,并且设置了全局标记 (`g`) 和不区分大小写的选项 (`i`) 进行多次扫描整个输入数据流[^2]。 ##### 示例 3: 替换操作 除了单纯验证外,还可以运用替换逻辑修改原始资料内容。 ```javascript // 将所有的逗号转换成分号 const replaceCommasWithSemicolons = str => str.replace(/,/g, ';'); console.log(replaceCommasWithSemicolons('apple,banana,cherry')); // 结果应该是 apple;banana;cherry ``` 在这个案例里,`.replace()` 接受两个参数——一个是代表需变更位置的目标样式描述;另一个则是新值本身。由于我们添加了全局修饰符(`g`),所以所有符合条件的地方都会受到影响而不是仅仅局限于首次发现的位置[^1]。 ### 总结 以上就是有关于 JavaScript 中基于字符串字面量形式使用的几个典型场景介绍及其实际编码示范说明。值得注意的是,在性能敏感场合下推荐优先选用这种声明方式因为其具备自动优化机制从而减少不必要的重复计算开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值