gpt4 book ai didi

javascript - 字符串内双引号的正则表达式

转载 作者:行者123 更新时间:2023-11-30 00:10:03 24 4
gpt4 key购买 nike

跟进我之前的问题 here .我意识到我需要更具体地说明我的正则表达式案例才能获得适合我的案例的答案。

我已经与这个正则表达式抗争了很长一段时间(也使用我之前问题的答案)而且我似乎无法构建我需要的东西。

我需要替换所有出现的两个重复单引号 ''\'在所有字符串内(所以在字符串内意味着在单引号之间 'somesStringWithOrWithoutDoubleQuoteOccurrences' )。这是因为在一种语言(语法)中,字符串中的引号是用 ' 转义的。而另一个 (javascript) 使用 \用于转义。

这里有一个例子(实际的例子可以包含多个用 , 分隔的字符串,但 , 当然也可以与字符串一起出现):

'word'''',and''','another'',''word','''test',X,'',FUNCTION('A'' B C D')
"--------------","----------------","------",-,"",FUNCTION("---------")
" ++++ ++"," ++ ++ ","++ ", ,"", (" ++ ")
1 2 3 4 5 6 7

replace 之后的结果应该是:

'word\'\',and\'','another\',\'word','\'test',X,'',FUNCTION('A\' B C D')

++是必需的匹配字符串中的开始和结束引号(由 " 表示)在示例下面的行中永远不应该是匹配的一部分(这些单引号标记可以出现双引号的字符串的实际开头或结尾) .

当我看到它时,它看起来很简单,我可以立即从字符串中指出双引号,但我无法在我的模式中正确定义它。


备选

另一种解决方案是将开始和结束引号替换为双引号,并将出现两次的单引号替换为单引号:

'word'''',and''','another'',''word','''test',X,'',FUNCTION('A'' B C D')
"--------------","----------------","------",-,"",FUNCTION("---------")
++++ ++ , ++ ++ , ++ , , , ( ++ )
1 2 3 4 5 6 7

replace 之后的结果在这种情况下将是:

"word'',and'","another','word","'test",X,"",FUNCTION("A' B C D")

Here is a prepared Fiddle to test patterns

对于它有什么帮助,我想出了不工作:

/'(('{2})+)*'/g

/'[^']*(('')*)*[^']*'/g

/('(('{2})*)*')[^,$]/g

最佳答案

这不是问题:只需匹配这些字符串并使用替换回调方法将双撇号替换为单撇号:

var expression = /'([^']*(?:''[^']*)*)'/g;
var replacer = function(m, g1){
return g1 ? "'" + g1.replace(/''/g, '\'') + "'" : "''";
}

参见 this updated fiddle

'([^']*(?:''[^']*)*)'正则表达式仅匹配单引号字符串文字捕获单引号之间的内容。

模式匹配:

  • ' - 前导单引号
  • ([^']*(?:''[^']*)*) - 第 1 组捕获 '' 内的任意 0+ 个字符:
    • [^']* - 除单引号外的 0+ 个字符
    • (?:''[^']*)* - 0+ 个序列:
    • '' - 两个连续的撇号
    • [^']* - 除单引号外的 0+ 个字符
  • ' - 结束单引号

因此,当我们执行替换时,我们检查第 1 组是否匹配并且不为空。如果是,我们就返回 '',如果不是,我们在 "'"+ g1.replace(/''/g, '\'') + "'" 在替换回调中。

关于javascript - 字符串内双引号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36867277/

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