将JS字符串中引用的GUID的一个或多个实例替换为未引用的版本

Replace 1 or more instances of quoted GUIDs in JS string with unquoted versions

本文关键字:引用 实例 替换 版本 一个 JS 字符串 GUID      更新时间:2023-09-26

问题

我有一个字符串(在JavaScript中(,它可能包含也可能不包含位于不同位置的一个或多个GUID。这些GUID用单引号括起来。我需要去掉引号。

到目前为止我拥有的东西

Regex将GUID与单引号匹配:

var guid = /('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')/ig;

替换所有单引号和双引号的方法:

myString = myString.replace(/["']/g, ""); // I actually don't need the double quote here...

但我不知道如何将匹配的GUID的每个实例替换为带有相同GUID的单引号而不带引号。。。同时仍保留字符串中的任何其他单引号。

我想我可能需要得到所有的比赛,循环浏览每一场比赛,然后进行替换。。在伪代码中:

var matches = myString.matches(guid);
foreach (var match in matches)
{
    myString = myString.replace(match.value, match.value.replace("'", ""));
}

有人能在jQueryplain JS中给我以上内容吗?此外,如果有一种更简单的方法,那就更好了。

你非常接近。更改正则表达式以包含一个不包含'的捕获组

var guid = /'([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'/ig;
// Change   ^^------------------------------------------------------------^^

然后:

str = str.replace(guid, "$1");

CCD_ 2=第一捕获组。由于正则表达式上的g,它将替换字符串中出现的所有内容。

实时示例:

var guid = /'([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'/ig;
var str = "Testing '00b3dada-88d7-482a-b082-039cc7153023' and '30378f4e-889c-4a9a-854c-daa304969246' and '413db223-7c02-4f95-a994-8aaaad48a245'";
snippet.log("Before: " + str);
str = str.replace(guid, "$1");
snippet.log("After: " + str);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>