javascript/regex 忽略双引号中的分号

标签 javascript regex split

我被这个问题难住了——我有一个字符串几乎是一个分号分隔的字符串,它应该是这样的:

one; two; three "four; five;six"; seven

我想使用 javascript 中的正则表达式将其拆分成这样的数组(例如,忽略双引号内的任何分号):

['one','two','three "four; five;six"','seven']

我已经尝试过调整已知的 CSV 函数,但它们似乎能够适应第三个元素(“三“四;五;六”;”)。

这似乎是一个正则表达式类型的问题,但如果存在使用超过正则表达式的解决方案,我当然很感兴趣!

更新:我还应该注意,引用字符串中分号前后可能有空格。我更新了示例以反射(reflect)这一点。

最佳答案

假设您不允许在引号内使用转义引号(例如 "this has\"escaped quotes\"inside"),那么这应该有效:

var rx = /(?!;|$)[^;"]*(("[^"]*")[^;"]*)*/g;
var str = 'one; two; three "four;five;six"; seven';
var res = str.match(rx)
// res = ['one', ' two', ' three "four;five;six"', ' seven']

请注意,您需要 negative-lookahead (?!;|$) 在正则表达式的开头,以防止它匹配空字符串,否则 match 方法匹配每个分号前面的空字符串出于某种原因。

更新:

我认为这个正则表达式也应该与转义引号一起使用(尽管我希望得到有关正确性的反馈)。我还在负先行模式中添加了额外的 \s 以去除前面分号后的空白。

/(?!\s|;|$)[^;"]*("(\\.|[^\\"])*"[^;"]*)*/g

关于javascript/regex 忽略双引号中的分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12335355/

相关文章:

javascript - jquery不改变元素的src

javascript - 使用 Dojo SpinWheel

javascript - Vue.JS 数据属性未定义

javascript - 使用 vscode-regex 插件?

java - Jenkins groovy 正则表达式匹配字符串 : Error: java. io.NotSerializableException : java. util.regex.Matcher

string - 去我怎样才能有效地将字符串分成几部分

javascript - 我如何防止 .js 文件被 webpack 捆绑

javascript - 是否可以在本地化 Web 应用程序环境中使用正则表达式进行验证?

unix - 使用 awk 删除列

java - 如何在不使用数组的情况下拆分字符串?