js split 正则表达式过滤引号中的逗号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js split 正则表达式过滤引号中的逗号相关的知识,希望对你有一定的参考价值。

var s = "1,2,'a,b',3";
var a = s.split(",");

我想得到的数组是
1
3
a,b
3
如何实现
字符串无限长,会有多个'字符串,字符串'的形式

split() 方法用于把一个字符串分割成字符串数组。

语法

stringObject.split(separator,howmany)

参数

separator    必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。    

howmany    可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。   

返回值

一个字符串数组。该数组是通过在 separator 指定的边界处将字符串 stringObject 分割成子串创建的。返回的数组中的字串不包括separator 自身。

如果想通过正则表达式,完成按引号中的逗号进行拆分,下面是代码,仅供参考:

var str = \'sdfs,dhf,skjdf","sdfsdfsdfsd","sdfe\';
str.split(/\\",\\"/g);
----> ["sdfs,dhf,skjdf", "sdfsdfsdfsd", "sdfe"]


参考技术A 直接用replace好了,贴个简单的例子给你,把一个字串内的逗号跟引号去掉
希望这个是符合你的需求的,你自己看看吧 ;

<html>
<head>
<script language="javascript" type="text/javascript">
function window_load()
var str = "12,34'56\"78"; //12,34'56"78
str = str.replace(/[,'"]/g,"");
alert(str); // 返回12345678

</script>
</head>
<body onload="window_load();">

<body>
参考技术B 我想到两种方法,
第一种:s.split(",(?=(?:[^']*(?:'[^']*')?[^']*)*$)"),不过效率可能有点低,如果只是少量字符串应该可以。这是正则的方法。

第二种:var a = eval("["+s+"]");本回答被提问者和网友采纳

Bigquery 正则表达式 - 删除双引号中的逗号

【中文标题】Bigquery 正则表达式 - 删除双引号中的逗号【英文标题】:Big query regular expression - remove comma in double quotes 【发布时间】:2021-11-22 03:40:59 【问题描述】:

基本上我需要拆分 json 字符串并选择特定属性(在 unnest 之后)

键和值未知"date":"2011-01-01","ok_key":"ok_value","ok_key2":"value2","key3":"no_okay,str_2"

我试过了:

用逗号分割,因为字符串中有逗号,所以不起作用 使用正则表达式替换字符串中的逗号,但大查询中的 RE2 实现没有 支持后视

我现在有一个替代方案:

replace(json_query(attributes,"$"), '","', '"|separator|"')

创建我自己的分隔符来替换“好”逗号,然后我可以使用我定义的这个分隔符进行拆分..

有没有办法替换 Big Query 中双引号之间的逗号?只是好奇。

所需的输出是 2 个字符串列:

Col_Key、Col_Value “日期”、“2011-01-01” “ok_key”、“ok_value” "ok_key2","value2" "key3", "no_okay,str_2"

我现在的解决方法是 split(translate(replace(json_query(bada_json_str,"$"), '","', '"|separator|"'),"",""),'|separator|')

它不能完美运行,因为 JSON 值说 INT 类型可能没有双引号括起来

【问题讨论】:

预期的输出是什么?另外,你事先知道键名吗? 每当你给出一个例子时,请展示你想要的结果。这对你来说可能很清楚,但对读者来说可能不是。你想用不在双引号内的逗号分割字符串吗? 要将字符串拆分为不在双引号内的逗号,您可以匹配以下正则表达式:(?:^|,)([^,"]*(?:(?:"[^"]*")[^,"]*)*)(?=,|$)。不在引用字符串中的逗号之间的匹配被保存到捕获组 1。Demo... ...对于您的示例,来自捕获组 1 的匹配如下:"date":"2011-01-01""ok_key":"ok_value""ok_key2":"value2""key3":"no_okay,str_2"。将光标悬停在链接上的正则表达式的某些部分上以获取其功能的描述。只要支持积极的前瞻,这应该可以工作。 谢谢,这正是重点。 Big Query RE2 实现不支持前瞻后瞻。我用笨拙的替换“好”逗号和“好冒号”解决了 【参考方案1】:

在下面使用

select key, value
from data, unnest(bqutil.fn.json_extract_keys(attributes)) key with offset
join unnest(bqutil.fn.json_extract_values(attributes)) value with offset
using(offset)    

如果应用于您问题中的样本数据 - 输出是

【讨论】:

你试过了吗?对你有用吗?

以上是关于js split 正则表达式过滤引号中的逗号的主要内容,如果未能解决你的问题,请参考以下文章

Clojure 中的 CSV 解析器需要避免引号中的逗号

用记事本++中的正则表达式替换引号中的所有逗号

简单的js正则表达式问题

Bigquery 正则表达式 - 删除双引号中的逗号

GROOVY - 解析CSV:忽略双引号内的逗号

正则表达式匹配引号外的逗号 - XML 模式变体