问题
我有一个字符串(在 JavaScript 中),在不同的地方可能包含或不包含一个或多个 GUID 。这些 GUID 被单引号括起来。我需要删除引号。
我有多远
正则表达式将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("'", ""));
}
有人可以在 jQuery 或普通JS 中提供上述内容吗?此外,如果有更简单的方法,那就更好了。
答案 0 :(得分:2)
你非常接近。更改该正则表达式以包含一个捕获组,而不包含中的'
:
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");
$1
=第一个捕获组。由于正则表达式上的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>
&#13;