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