使用jquery或regex,带点但不带点的拆分字符串位于单引号中

spilt string with dot but dot not lies in single quote using jquery or regex

本文关键字:拆分 字符串 于单引 jquery regex 使用      更新时间:2023-09-26

我需要在点上拆分这样的字符串。但我不想拆分字符串('或")中的点。我不是在分析文件,只是一个没有换行符的简单字符串。

part 1;"12:'xyz@gmail.com'.8:'23'.25:'hello'.6:6"

结果应该是:

part 1 "12:'xyz@gmail.com'"
part 2 "8:'23'"
part 3 "25:'hello'"
part 4 "6:6"

我想这可以用正则表达式来完成,但如果不能;我对另一种方法持开放态度。

编辑

我有

str = "12:'xyz@gmail.com'.8:'23'.25:'hello'.6:6"

我希望得到

str[0]=12:xyz@gmail.com str[1]=8:'23' 
str[2]=25:'hello' 
str[3]=6:6

但每当我拆分它时,它显示为:

str[0]=12:xyz@gmail
str[1]=com
str[2]=8:'23'
str[3]=25:'hello'
str[4]=6:6

您可以使用以下正则表达式匹配

/[^.']+(?:'[^']*')?/g

查看regex演示

详细信息:

  • [^.']+-除'.之外的1个或多个字符
  • (?:'[^']*')?-可选的'...'字符串('后面跟0+个字符,而不是'后面跟'

根据内容的不同,您可以使用增强版本:

/[^.']*(?:'[^']*'[^.']*)*/g

查看另一个演示

演示1(简化):

var re = /[^.']+(?:'[^']*')?/g; 
var str = '12:''xyz@gmail.com''.8:''23''.25:''hello''.6:6';
var m = str.match(re);
document.body.innerHTML = "<pre>" + JSON.stringify(m, 0, 4) + "</pre>";

演示2(如果内容更复杂):

var re = /[^.']*(?:'[^']*'[^.']*)*/g; 
var str = '''1.2'' 12:''xyz@gmail.com''.8:''23''.25:''hello''.6:6';
var res = [];
while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    if (m[0]) { res.push(m[0]);}
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";

我不确定分割,但你可以像这样使用replace(容易出现灾难性的回溯)

((?:(?:'[^']+')*[^.']*)*)(?:'.|$)

Regex演示

JS代码

var re = /((?:(?:'[^']+')*[^.']*)*)(?:'.|$)/g; 
var str = '''1.2'':''xyz@mail.com''.8:''2.3''.25:''he.llo''.6:6''1.2'''
document.writeln("<pre>" + str.replace(re, "$1'n") + "</pre>");

试试这个正则表达式:

new RegExp('('.[^':]+':''?[^'.]+''?)','g');