【问题标题】:Extract words using regex使用正则表达式提取单词
【发布时间】:2018-04-24 10:17:07
【问题描述】:

我有一个字符串查询,我想匹配和提取特定的单词。 当我有这个词word.EXACT提取这个词的容器

MESH.EXACT("blood glucose monitoring") 提取词"blood glucose monitoring"

  • words.exact("N-Words") -> 结果"N-Words"
  • words.exact(N-Words) -> 结果N-Words

Query_Input= (EMB.EXACT("insulin treatment")) and (MESH.EXACT("blood glucose monitoring")) OR "Self-Monitoring of Blood Glucose”

输出必须是这样的

Query_out="insulin treatment" "blood glucose monitoring" "Self-Monitoring of Blood Glucose”

这个演示有我的正则表达式和我的正则表达式:https://regex101.com/r/rqpmXr/15

【问题讨论】:

标签: javascript regex


【解决方案1】:

你可以使用

/\w+\.EXACT\(([^)]*)\)/g

并替换为$1,占位符包含第 1 组值。请参阅regex demo

模式详情

  • \w+ - 1 个或多个单词字符
  • \.EXACT\( - 文字 .EXACT( 子字符串
  • ([^)]*) - 第 1 组:除 ) 之外的任何 0+ 个字符(您可以使用 [^()]*,以防您需要确保您在一组 (...) 内)
  • \) - 一个 ) 字符。

查看 JS 演示:

var s = 'MESH.EXACT("blood glucose monitoring") words tt.EXACT("blood glucose monitoring") ';
var rx = /\w+\.EXACT\(([^)]*)\)/g;
document.querySelector("#result").innerHTML = s.replace(rx, "$1");
<div id="result" />

【讨论】:

    【解决方案2】:

    你可以这样做:

    (?<=\w\.EXACT\()[^)]+
    

    请参阅regex demo。匹配任何不是右括号 [^)]+ 的字符,只有在前面有 \w\.EXACT( 时才匹配。

    如果您想要替换,您可以捕获上述匹配项并使用\1 (注意尾随空格)进行替换:

    .*(?<=\w\.EXACT\()([^)]+).*\n|.*
    

    如图所示:https://regex101.com/r/BS3nwr/4

    编辑:正如在其中一个 cmets 中引起我注意的那样,某些 Web 浏览器不支持后视 (?&lt;=),因此您可以使用(请注意,此正则表达式比前一个更慢(需要更多步骤)一):

    \w+\.EXACT\(([^)]+).*\n|.*?
    

    【讨论】:

    • Lookbehinds 还不是所有浏览器的标准功能。暂时只支持最新的 Chrome 版本,不知道其他浏览器什么时候能赶上。
    【解决方案3】:

    您好,我相信这会奏效:

    .EXACT\((.*?)\)

    工作示例:https://regex101.com/r/uQj2vv/2/

    【讨论】:

      【解决方案4】:

      这是一个可执行的 Javascript 示例,它从您指定的输入中提取您指定的输出:

      let input = "(EMB.EXACT(\"insulin treatment\")) and (MESH.EXACT(\"blood glucose monitoring\")) OR \"Self-Monitoring of Blood Glucose\"";
      
      let re = /(?:EXACT\(("[^"]+")\)|OR\s*("[^"]+"))/g;
      
      let Query_out = [];
      while ((match = re.exec(input)) !== null) {
        Query_out.push(match[1] ? match[1] : match[2]);
      }
      
      console.log(Query_out.join(" "));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        • 2011-12-31
        • 2021-10-30
        • 2021-12-24
        • 1970-01-01
        相关资源
        最近更新 更多