如何使用 JavaScript 正则表达式获取大括号之间的字符串?


我们可以创建一个正则表达式,以便它可以找到大括号之间所有子字符串。之后,我们可以使用 exec() 或 match() 方法提取匹配的子字符串。

在本教程中,我们将学习如何使用正则表达式来获取 JavaScript 中大括号之间的字符串。例如,如果我们得到一个类似于“这是一个包含 {字符串} 和 {大括号} 的字符串”的字符串,我们需要提取位于大括号之间的所有子字符串。

使用 exec() 方法和正则表达式获取大括号之间的字符串

exec() 方法通常与正则表达式一起使用,以查找匹配的子字符串。它以数组格式返回所有匹配的结果,如果找不到任何匹配的出现,则返回 null 值。

语法

用户可以按照以下语法使用 exec() 方法和正则表达式获取大括号之间的所有子字符串。

var regex = /{([^}]+)}/g;
while (match = regex.exec(originalStr)) {
   results.push(match[1]);
}

在上面的语法中,我们创建了正则表达式来查找大括号之间的子字符串。之后,我们遍历匹配数组并获取所有匹配的出现。

示例

在下面的示例中,“originalStr”变量包含带有大括号的字符串。regex.exec() 方法返回所有匹配子字符串的二维数组。数组的每个元素都是一个包含两个字符串的数组。第一个元素是一个带有大括号的字符串,第二个元素是没有大括号的字符串,这是我们想要提取的。

在输出中,用户可以看到它显示了“开发者”和“JavaScript”子字符串,因为它们都位于大括号之间。

<html>
<body>
   <h3>Using the <i> regular expression and exec() method </i> to get string between curly braces in JavaScript</h3>
   <div id = "demo"> </div>
   <script>
      let output = document.getElementById("demo");
      function getStringBetweenBraces() {
         var originalStr = "Hello {Developers}! Let's develop {JavaScript} code!";
         var found = [];
         var regex = /{([^}]+)}/g;
         var results = [];
         let match;
         while (match = regex.exec(originalStr)) {
            results.push(match[1]);
         }
         output.innerHTML = "The original string is " + originalStr + "<br>";
         output.innerHTML += "The substrings between curly braces are " + results + "<br>";
      }
      getStringBetweenBraces();
   </script>
</body>
</html>

使用 match() 方法和正则表达式获取大括号之间的字符串

match() 方法也以数组格式返回字符串中所有匹配的出现。

语法

用户可以按照以下语法使用 match() 方法和正则表达式获取大括号之间的字符串

let results = originalStr.match(/{([^}]+)}/g); 

在上面的语法中,originalStr 是一个带有大括号的字符串,我们将正则表达式作为 match() 方法参数传递。

示例

在下面的示例中,match() 方法返回带有大括号的字符串数组。但是,它不会返回删除大括号后的字符串。用户可以使用 subStr() 或 substring() 方法从返回的结果中删除大括号。

<html>
<body>
   <h3>Using the <i> regular expression and match() method </i> to get string between curly braces in JavaScript</h3>
   <div id = "demo"> </div>
   <script>
      let output = document.getElementById("demo");
      function getStringBetweenBraces() {
         var originalStr = "This is {sample} string! This is {original} string!";
         let results = originalStr.match(/{([^}]+)}/g); 
         output.innerHTML = "The original string is " + originalStr + "<br>";
         output.innerHTML += "The substrings between curly braces are " + results + "<br>";
      }
      getStringBetweenBraces();
   </script>
</body>
</html>

使用 for 循环获取大括号之间的字符串

我们还可以通过使用 for 循环迭代字符串来提取大括号之间的所有子字符串。我们可以跟踪大括号的起始和结束索引。之后,我们可以使用 substring() 方法从原始字符串中提取子字符串。

语法

用户可以按照以下语法使用 for 循环提取大括号之间的子字符串。

for ( ) {
   if (str[i] == "{")
   start = i;
   if (str[i] == "}") {
      end = i;
      let bracesString = str.substring(start + 1, end);
   }
}   

在上面的语法中,我们跟踪大括号的起始和结束索引,并使用 substring() 方法提取字符串。

步骤

步骤 1 - 使用 for 循环迭代字符串。

步骤 2 - 如果字符串中索引为“I”的字符等于“{”,则将索引值存储在 start 变量中。

步骤 3 - 如果字符串中索引为“I”的字符等于“}”,则将索引值存储在 end 变量中。

步骤 3.1 - 使用 substring() 方法获取“start + 1”索引到“end”索引之间的子字符串。

步骤 3.2 - 将结果子字符串推入数组。

示例

在下面的示例中,我们按照上述步骤使用 for 循环提取大括号之间的字符串。但是,此方法不用于提取嵌套大括号之间的字符串。

<html>
<body>
   <h3>Using the <i> for loop </i> to get string between curly braces in JavaScript</h3>
   <div id = "demo"> </div>
   <script>
      let output = document.getElementById("demo");
      function getStringBetweenBraces() {
         var str = "Hello {Users}! Welcome to {Website}!";
         var start = 0;
         var end = 0;
         let results = [];
         for (var i = 0; i < str.length; i++) {
            if (str[i] == "{") {
               start = i;
            }
            if (str[i] == "}") {
               end = i;
               let bracesString = str.substring(start + 1, end);
               results.push(bracesString);
            }
         }
         output.innerHTML = "The original string is " + str + "<br>";
         output.innerHTML += "The substrings between curly braces are " + results + "<br>";
      }
      getStringBetweenBraces();
   </script>
</body>
</html> 

在本教程中,我们学习了如何使用正则表达式提取大括号之间的字符串。在第一种方法中,我们使用带有正则表达式的 exec() 方法;在第二种方法中,我们使用带有正则表达式的 match() 方法。

在第三种方法中,我们使用了 for 循环而不是正则表达式。

更新于:2023年3月6日

5K+ 次浏览

启动您的 职业生涯

完成课程后获得认证

开始学习
广告