javascript - 我们如何通过在javascript中使用正则表达式转义撇号来选择两个单引号之间的字符串?
问题描述
示例文本:'builder's margin' means the percentage stated in Item 8 of Schedule 1;
在这里,我有一个正则表达式,可以在两个单引号之间选择单词/'(.*?[^\\])'/g
。但是当我尝试从示例文本中提取时它不起作用,builder's margin
因为有撇号所以它只能选择builder
. 那么有什么方法可以让我们避开撇号并选择到边距?
解决方案
如果您不需要支持转义序列(即,如果您的字符串不是以纯文本形式呈现的字符串文字),您可以使用
(?!\b'\b)'([^']*(?:\b'\b[^']*)*)(?!\b'\b)'
否则,如果您拥有的文本可以包含转义序列,则可以使用
(?!\b'\b)'([^'\\]*(?:(?:\\.|\b'\b)[^'\\]*)*)(?!\b'\b)'
请参阅正则表达式演示 #1和正则表达式演示 #2。
注意:替换.
为[^]
以匹配任何字符,包括换行符。
细节
(?!\b'\b)'
-'
两端没有被单词字符包围的字符([^']*(?:\b'\b[^']*)*)
- 捕获组 1:[^']*
- 零个或多个字符'
(?:\b'\b[^']*)*
- 零个或多个'
未包含在单词字符中的 a,然后是零个或多个字符,而不是'
([^'\\]*(?:(?:\\.|\b'\b)[^'\\]*)*)
- 第 1 组(在第二种模式中):[^'\\]*
'
- 除了and之外的零个或多个字符\
(?:(?:\\.|\b'\b)[^'\\]*)*
- a 的零个或多个序列\
+ 任何一个字符或用单词字符包围的 a ,然后是除and'
之外的零个或多个字符'
\
(?!\b'\b)'
-'
两端没有被单词字符包围的字符
推荐阅读
- android - Zygote: isWhitelistProcess - 进程被列入白名单
- java - 为什么字母数字 id 搜索在 Java Swing 中无法正常工作?
- c++ - DirectX 11 调试层捕获错误字符串
- python - 在检测到某些东西时运行某个代码 python
- swift - 使用泛型组合 2 个独立的几乎相同的函数
- string - 不是通过多项式滚动计算字符串 O(n) 的哈希值,其中 n 是字符串大小?
- docker - docker-compose 在运行入口点后保持容器运行
- arrays - 如何在 ruby 中加入两个表哈希
- macos - 将 Cocoa 实用程序应用程序拆分为辅助二进制文件 + 主应用程序二进制文件的利弊?
- android - 如何像图像中一样为 BottomNavigationBar 设置动画?