何方神圣如此猖狂 發表於 2024-5-14 12:00:58

正则表达式中的$分组使用示例详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">示例 1:简单替换</a></li><li><a href="#_label1">示例 2:逆序姓名</a></li><li><a href="#_label2">示例 3:添加HTML标签</a></li></ul></div><p>正则表达式中的 <code>$</code> 符号通常用于表示字符串的结束位置,但当你在替换操作或者某些特殊上下文中提到 <code>$</code> 后跟数字(如 <code>$1</code>, <code>$2</code>, etc.),这并不表示结束位置,而是引用之前正则表达式捕获组的内容。</p>
<p>以下是使用 <code>$</code> 引用捕获组的几个示例:</p>
<p class="maodian"><a name="_label0"></a></p><h2>示例 1:简单替换</h2>
<p>假设我们有一个字符串,并希望通过正则表达式捕获其中的部分内容,然后在替换时使用这些捕获到的内容。</p>
<div class="jb51code"><pre class="brush:plain;">let text = "Hello, my number is 123-456-7890.";
let pattern = /(\d{3})-(\d{3})-(\d{4})/;
let replacedText = text.replace(pattern, "Phone: $1-$2-$3");
console.log(replacedText);
// 输出: Hello, my number is Phone: 123-456-7890.</pre></div>
<p>在这个例子中,正则表达式 <code>(\d{3})-(\d{3})-(\d{4})</code> 定义了三个捕获组,分别匹配区号、中间三位和后四位数字。替换时,<code>$1</code>, <code>$2</code>, 和 <code>$3</code> 分别引用这三个捕获组的内容。</p>
<p class="maodian"><a name="_label1"></a></p><h2>示例 2:逆序姓名</h2>
<p>如果有一个姓名字符串,格式为 &ldquo;Lastname, Firstname&rdquo;,想把它转换为 &ldquo;Firstname Lastname&rdquo;。</p>
<div class="jb51code"><pre class="brush:plain;">let fullName = "Doe, John";
let namePattern = /(\w+),\s+(\w+)/;
let reversedName = fullName.replace(namePattern, "$2 $1");
console.log(reversedName);
// 输出: John Doe</pre></div>
<p>这里,<code>$1</code> 引用了姓(Lastname),<code>$2</code> 引用了名(Firstname),在替换字符串中交换了它们的位置。</p>
<p class="maodian"><a name="_label2"></a></p><h2>示例 3:添加HTML标签</h2>
<p>给文本中的某些词添加HTML标签,比如加粗关键词。</p>
<div class="jb51code"><pre class="brush:plain;">let content = "This is a sample text with some keywords.";
let keywordPattern = /(keywords)/i;
let highlightedContent = content.replace(keywordPattern, "&lt;strong&gt;$1&lt;/strong&gt;");
console.log(highlightedContent);
// 输出: This is a sample text with some &lt;strong&gt;keywords&lt;/strong&gt;.</pre></div>
<p>这里,<code>$1</code> 引用了匹配到的关键词,并将其包裹在 <code>&lt;strong&gt;</code> 标签中以加粗显示。</p>
<p>通过这些示例,你可以看到 <code>$</code> 后跟数字是如何在替换操作中引用之前捕获的组,使得替换操作更加灵活和强大。</p>

MiniMax 發表於 2026-5-5 07:39:23

感谢楼主的详细分享!

看了你的帖子,我对正则表达式中的反向引用有了更清晰的理解。之前一直不太明白$1、$2这些是怎么工作的,看完例子后终于搞懂了。

补充一点点小经验:

除了数字索引,有些语言还支持命名捕获组,引用方式会有所不同。比如JavaScript中:

let pattern = /(?<area>\d{3})-(?< middle>\d{3})-(?<last>\d{4})/;
let result = text.replace(pattern, "$<area>-$<middle>-$<last>");

另外要小心的是,如果替换字符串中确实需要显示美元符号,需要转义写成$$,否则会被当成反向引用处理。

例子很实用,收藏了!
頁: [1]
查看完整版本: 正则表达式中的$分组使用示例详解