gpt4 book ai didi

javascript - 正则表达式拆分并记住匹配(优雅)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:05 28 4
gpt4 key购买 nike

我正在尝试为来自维基百科的 API 响应编写一个解析器。它真的很困惑,我已经求助于旧的 RegEx 来清理大部分东西。然而,我坚持这一点。考虑一个字符串:

 var a ="[[December 1]]  A triangular [[Conjunction (astronomy)|conjunction]] formed by a new Moon, Venus and Jupiter is a [[Conjunction (astronomy)#2008|prominent sight]] in the evening sky. [[December 2]]";

我希望这个字符串中的文本是:

 "December 1  A triangular conjunction formed by a new Moon, Venus and Jupiter is a prominent sight in the evening sky. December 2"

我在处理方括号 [,] 时遇到问题。我不能只删除它们,因为链接是这样表示的:

 [[Conjunction (astronomy)#2008|prominent sight]]

在这种情况下,我想删除“Conjunction (astronomy)#2008”部分,因为网页上显示的实际字符串是“prominent sight”。有没有一种优雅的方法可以在 JavaScript 中的一个 str.replace(//gi,"") 查询中处理这两种情况?

我这样做 a.replace(/\[\[.*\|/gi, ""); 它产生:

 "prominent sight]] in the evening sky. [[December 2]]"

很明显,我需要匹配连续的左括号和右括号 [[]] 作为模式,然后记住我假设的匹配。我不确定如何解决这个问题,但我希望这两种情况是清楚的:

  1. [[普通字]] -> 普通字
  2. [[ some definition blah |foo bar]] -> foo bar

最佳答案

您可以使用 String#replace使用以下 RegEx 进行回调

/\[{2}([\w\s()#]+)(?:\|([\w\s]+))?\]{2}/

Regex Demo

正则表达式解释:

  1. \[{2}([\w\s()#]+):
    • \[{2}:匹配 [[
    • ([\w\s()#]+):匹配任何字母数字字符,_,空格,(), 和# 一次或多次并将其放入第一个捕获组。
  2. (?:\|([\w\s]+))?\]{2}:
    • (?:: 非捕获组
    • \|:匹配管道符号|
    • ([\w\s]+):匹配字母数字字符,_,和空格一次或多次,放入第二个捕获组
    • \]{2}:匹配]]

正则表达式可视化更容易理解

Visualization

演示:

var regex = /\[{2}([\w\s()#]+)(?:\|([\w\s]+))?\]{2}/g;
var str = "[[December 1]] A triangular [[Conjunction (astronomy)|conjunction]] formed by a new Moon, Venus and Jupiter is a [[Conjunction (astronomy)#2008|prominent sight]] in the evening sky. [[December 2]]";

str = str.replace(regex, function(c, m1, m2) {
return m2 ? m2 : m1;
});

document.body.innerHTML = '<pre>' + str + '</pre>';


This regex is not working for the string I mentioned in the question, but it is working for the string I put up in the comment

"A [[2008 Iwate-Miyagi Nairiku earthquake|6.9 magnitude earthquake]] in Iwate Prefecture, Japan, kills 12 and injures more than 400."

您可以使用以下 RegEx。

\[{2}([^|]*?)(?:\|(.*?))?\]{2}

关于javascript - 正则表达式拆分并记住匹配(优雅),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34847757/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com