gpt4 book ai didi

javascript - 使用 RegEx 进行 javascript 字符串参数编码

转载 作者:行者123 更新时间:2023-11-29 19:46:29 25 4
gpt4 key购买 nike

总结

能否使用正则表达式来匹配多个字符,但用特定的替换来替换单个字符。

例如,将\替换为\\,将"替换为\x22,将替换'\x27

据我了解,这根本不可能,因为您可以在表达式中使用捕获的子匹配,但不能使用任何级别的逻辑,如果发生子匹配,您可以有条件地输出文本。

下面的 VB.NET 代码显然是完全不正确的,但可以让您了解我的想法...(即如果有一个替换命令允许您说“如果子匹配 1 发生,那么输出\\")

RegEx.Replace(text, "(\)?("")?(')?", "{if($1,'\\')}{if($2,'\x22')}{if($2,'\x27')}")

(这适用于 .NET RegEx 类,但适用于 javascript RegExp 类)

背景

更多的是出于兴趣而不是实际需要,但我一直在玩编码文本以便在 javascript 参数中使用。 (好吧,需求肯定是有的,但兴趣在于效率。)

我一直在使用标准的 String.Replace,并使用以下两个函数对性能进行一些测试...

Public Function GetJSSafeString(ByVal text As String) As String
Return text.Replace("\", "\\").Replace("""", "\x22").Replace("'", "\x27")
End Function
Public Function GetJSSafeString2(ByVal text As String) As String
If text.Contains("\") Then
text = text.Replace("\", "\\")
End If
If text.Contains("""") Then
text = text.Replace("""", "\x22")
End If
If text.Contains("'") Then
text = text.Replace("'", "\x27")
End If
Return text
End Function

使用两个字符串,长度都在 200 左右——第一个不包含任何要转换的字符——第二个包含每个要转换的字符之一 (\"')。我跑了两个字符串中的每一个通过两个函数各 100000 次。

四个结果(以毫秒为单位)大致如下......

GetJSSafeString, no converted characters: 182.0364
GetJSSafeString, converted characters: 316.0632

GetJSSafeString2, no converted characters: 60.012
GetJSSafeString2, converted characters: 354.0708

很明显,如果没有替换,GetJSSafeString2 是最好的,如果有字符要转换,则最差(但不是很多更糟,所以看起来是更好的选择)。

但这让我开始思考......这可以用一个正则表达式来完成吗?

如果是这样,它会比上述两个函数中的任何一个都快吗?

最佳答案

JavaScript 中的解决方案:

var text="this is a test \\ with \"things\" to ' replace";
var h={'\\':'\\\\', '"':"\\x22", "'":"\\x27"}; //we define here the replacements
text=text.replace(/("|\\|')/g,function(match){return h[match]});
alert(text); //prints: this is a test \\ with \x22things\x22 to \x27 replace

关于javascript - 使用 RegEx 进行 javascript 字符串参数编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19154783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com