用不带引号的版本替换JS字符串中的一个或多个带引号的GUID实例

时间:2015-08-19 22:51:26

标签: javascript jquery regex

问题

我有一个字符串(在 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 中提供上述内容吗?此外,如果有更简单的方法,那就更好了。

1 个答案:

答案 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;
&#13;
&#13;