首页 > 解决方案 > 我们如何通过在javascript中使用正则表达式转义撇号来选择两个单引号之间的字符串?

问题描述

示例文本:'builder's margin' means the percentage stated in Item 8 of Schedule 1;

在这里,我有一个正则表达式,可以在两个单引号之间选择单词/'(.*?[^\\])'/g。但是当我尝试从示例文本中提取时它不起作用,builder's margin因为有撇号所以它只能选择builder. 那么有什么方法可以让我们避开撇号并选择到边距?

标签: javascriptregex

解决方案


如果您不需要支持转义序列(即,如果您的字符串不是以纯文本形式呈现的字符串文字),您可以使用

(?!\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)'-'两端没有被单词字符包围的字符

推荐阅读