Javascript正则表达式-如何在组中查找PascalCase项

Javascript正则表达式-如何在组中查找PascalCase项,javascript,regex,replace,regex-group,Javascript,Regex,Replace,Regex Group,我需要转换如下内容: [[单击此处|此链接]] 致: [单击此处](https://example.com/this-is-a-link) 我可以通过使用这个regex/\[\[(.*?\)\(.*?\)\]\]/g找到第一个[[单击此处]ThisIsALink]],我可以将其替换为[单击此处](https://example.com/ThisIsALink]),但我如何才能将最后一部分转换为这是一个链接?我尝试了一些方法,但我似乎找到了所有的PascalCased事件,而不仅仅是第一个找到的正

我需要转换如下内容:

[[单击此处|此链接]]

致:

[单击此处](https://example.com/this-is-a-link)

我可以通过使用这个regex
/\[\[(.*?\)\(.*?\)\]\]/g找到第一个
[[单击此处]ThisIsALink]]
,我可以将其替换为
[单击此处](https://example.com/ThisIsALink])
,但我如何才能将最后一部分转换为
这是一个链接
?我尝试了一些方法,但我似乎找到了所有的PascalCased事件,而不仅仅是第一个找到的正则表达式模式中发生的事件。(我正在将.md文件转换为.pdf,因此它是一整页内容,而不仅仅是这些链接)

这是我到目前为止所拥有的

var exampleUrl = "https://example.com/";
var urlOne = /\[\[(.*?)\|(.*?)\]\]/g;

data.replace(urlOne, "[$1](" + exampleUrl + "$2)"));
这导致:
[单击此处](https://example.com/ThisIsALink)

您可以使用

const Text=[“Text[[单击此处| ThisIsALink]]Text…”,
“文本[[单击此处|此为链接]]文本…”;
const exampleUrl=”https://example.com/";
常量urlOne=/\[\[((?:(?!\[\[))*?)\\\;(.*?)]]/g;
for(文本的var文本){
console.log(
text.replace(urlOne,(ux,y)=>
`[${x}](${exampleUrl}${y.replace(/[^A-Za-z]+/g,”)
.替换(/(?!^)[A-Z]/g'-$&')
.toLowerCase()})`);

}
这种方法确实可以在任何给定长度的文本中找到并替换OP提到的模式,无论该模式在文本中匹配的频率如何

它还使用了一个非常简单的正则表达式来表示

正则表达式看起来是这样的,读起来是这样的

  • \[\[
    …匹配(字面上)两个开放方括号
  • ([^ |]+)
    …捕获每个字符序列(链接文本),它不是管道
  • \\\124;
    …然后匹配一个管道
  • ([^\]]+)
    …捕获每个字符序列(即url),它不是一个右括号
  • \]\]
    …然后匹配两个结束方括号
  • /…/g
    ..将regex标记为要处理/应用的全局模式
  • const sampleUrl='1〕https://example.com/'
    const sampleText=`Text[[Link A | ThisIsLinkA]]Text.Text[[Link B | thisIsLinkB]]Text。
    文本[[Link C | This-Is-Link-C]]文本。
    Text[[Link D|ThisIsLinkD]]Text.Text[[Link E|-this--Is--Link--E]]Text.`;
    函数convertLinkMarkup(文本,baseUrl){
    功能确保烤肉串(str){
    返回str
    .replace((/([A-Z])/g),“-$1')/-在任何拉丁大写字符前面加上“-”。
    .replace((/-+/g),“-”)/-将任何“-”序列替换为单个“-”。
    .替换((/^-+/g),“”)/-修剪任何前导的“-”序列。
    .toLowerCase();/-结果的大小写。
    }
    函数createLinkMarkup(匹配、文本、路径){
    返回`[${text}](${baseUrl}${ensureKebabCase(path)})`;
    }
    常量regXUrl=(/\[\[([^\]+)\\\\[([^\]+)\]\]\]/g);
    返回text.replace(regXUrl,createLinkMarkup);
    }
    console.log(
    样本文本,
    '\n\n..=>…\n\n',
    convertLinkMarkup(sampleText、sampleUrl)
    );
    
    。作为控制台包装{min height:100%!important;top:0;}
    啊,谢谢你的完美工作!我的问题中有一个小错误,我把括号和括号换成了意外。结束格式应为
    [单击此处](https://example.com/this-is-a-link)
    。我把你的答案更新为:
    .replace(urlOne,(ux,y)=>
    [${x}](${exampleUrl}${y.replace(/(?!^)[A-Z]/g,-$&')。toLowerCase()}
    实际上,我遇到了一个问题。如果我有一个像这样的链接,
    [[点击这里|这是一个链接]]
    它现在正在将它转换成
    [[点击这里|这是一个链接]]
    ,这是不需要的。@Designxsteph删除所有非alpha字符,
    ${y.replace(/[^a-Za-z]+/g',).replace(/(?!^[a-z]/g',-$&')