javascript - 使用 jquery 或正则表达式用点分割字符串但点不在单引号中

标签 javascript jquery regex

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

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 demo

详细信息:

  • [^.']+ - ' 以外的 1 个或多个字符。
  • (?:'[^']*')? - 可选的 '...' 字符串(' 后跟 0 + ' 以外的字符后跟 '

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

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

参见 another demo

演示 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>";

Demo 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>";

关于javascript - 使用 jquery 或正则表达式用点分割字符串但点不在单引号中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36981678/

相关文章:

javascript - $ ('body' ).on ('click' ) 不工作

javascript - 无法正确获取4个数组之间的公共(public)元素

javascript - 用正则表达式包裹单引号并替换换行符

Javascript自动改变字符串

javascript - 带日期选择器的 Acrobat PDF 表单

javascript - 从javascript中的对象方法获取变量

javascript - 从另一个下拉列表中选择一个值后填充下拉列表

regex - 正则表达式从字符串中提取前3个单词

iphone - 如何使用NSRegularExpression从字符串中提取电子邮件地址

Javascript 日期字符串构造函数更改时区