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',-$&')