我正在解析一些用冒号分隔的键值对,我遇到的问题是在值部分有一些我想忽略的冒号,但是split
函数还是把它们捡了起来。
样品:
Name: my name
description: this string is not escaped: i hate these colons
date: a date
在单独的行上,我尝试了line.split(/:/, 1)
,但它只匹配数据的值部分,接下来我尝试了line.split(/:/, 2)
,但它给了我['description', 'this string is not escaped']
,我需要整个字符串。
谢谢你的帮助!
7条答案
按热度按时间bybem2ql1#
5cg8jx4n2#
使用greedy运算符(
?
)仅拆分第一个示例。line.split(/: (.+)?/, 2);
l7wslrjt3#
如果您喜欢regexp的替代方案,请考虑以下内容:
参考:split、slice、join。
z6psavjg4#
稍微优雅一点:
tcomlyy65#
也许这种方法将是最好的为这样的目的:
因此,您可以在具有这种结构的配置/数据文件中使用表格,并且不必担心名称-值分隔符
':'
前后的空格。或者您可以使用原始的快速字符串函数
indexOf
和substr
,以我认为最快的方式(通过CPU和RAM)达到您的目标px9o7tmv6#
在第一次出现时将字符串一分为二
仅在第一列出现时拆分具有多列(即
:
列)的字符串使用正向后视
(?<=)
它基本上从 * 字符串的开头 *
^
开始消耗 * 不是列 *[^:]
* 零次或多次 **
的所有内容。一旦完成了正向后查找,最终匹配列:
。如果您还想删除列后面的一个或多个空格,
使用
/(?<=^[^:]*): */
Explanation on Regex101.com
brqmpdu17#