javascript - 如果有多个 AND、OR、NOT,则将句子拆分为引用的短语

标签 javascript

我有以下句子: 测试或或测试

我需要检测第一个 OR 并且不将其包含在引号中。输出应该是这样的:

“测试”或“或测试”

可能是多个OR|NOT|AND,输出应该是相同的。现在我只能检测到“或”,所以输出是“测试”或“测试”,但我需要它是“测试”或“或测试”

const testItem = item => {
  if (item.match(/\b(?:AND|OR|NOT)\b/g) !== null) {
    return item.replace(/([a-zA-Z]+)/gi, (word) => {
      if (['AND', 'OR', 'NOT'].indexOf(word) < 0) return `"${word}"`;
      return word;
    });
  }
}
   console.log(testItem("Test OR OR OR OR OR Test"))
   

输出应该是“测试”或“OR OR OR OR OR测试”

最佳答案

您可以使用以下正则表达式:

(.*?)(\s+(?:AND|OR|NOT)\s+)(.*)
  • (.*?) - 匹配尽可能少的内容并将其放入第一个捕获组
  • (\s+(?:AND|OR|NOT)\s+) - 匹配由一个或多个空白字符包围的 AND/OR/NOT 并将其放入第二个捕获组
  • (.*) - 匹配字符串的其余部分并将其放入第三个捕获组中。

现在您可以用三个捕获组替换字符串并包围第一个和最后一个组:

const testItem = item => item.replace(/(.*?)(\s+(?:AND|OR|NOT)\s+)(.*)/, '"$1"$2"$3"');

console.log(testItem("Test OR OR Test"));
console.log(testItem("Test AND OR Test"));
console.log(testItem("Test OR OR OR OR OR Test"));

关于javascript - 如果有多个 AND、OR、NOT,则将句子拆分为引用的短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59821357/

相关文章:

javascript - Chrome 扩展程序动态创建 HTML

javascript - 如何在DOM中手动添加Compiled Knockout Template?

javascript - 在 JavaScript 中将 json 对象写入 .json 文件

javascript - 使用 jQuery 重新排列 RSS 中 div 的顺序

javascript - 建议一种在数据库驱动的 Web 应用程序上提供弹出帮助文本的方法和/或 COTS 应用程序?

javascript - 如何在 laravel 中显示引导弹出模式?

javascript - jQuery:insertAfter() 在 Firefox 上不起作用

javascript - 当鼠标悬停在图像上时显示超链接和弹出窗口!

javascript - 如何在 graphQL 中对字段进行运行时数据操作?

javascript - JS如何在定义后使用对象解构