使用正则表达式提取单词

时间:2018-04-24 10:17:07

标签: javascript regex

我有一个字符串查询,我想匹配并提取特定的单词。 当我有这个词时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”

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

4 个答案:

答案 0 :(得分:1)

你可以这样做:

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

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

如果你想要替换,你可以捕获上面的匹配并使用\1 (注意尾随空格)进行重新定位:

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

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

编辑:在其中一条评论中引起我的注意,一些网络浏览器不支持后视(?<=),所以你可以使用(注意这个正则表达式比较慢(需要更多步骤)前一个):

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

答案 1 :(得分:1)

您可以使用

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

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

模式详情

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

参见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");

答案 2 :(得分:0)

嗨,我相信这会奏效:

.EXACT\((.*?)\)

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

答案 3 :(得分:0)

这是一个可执行的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(" "));