我有这样的字符串:
'newProductsInfo: [[1] - $2 dollars,[2] New Product,[3] Hello,[4]Same, [5]Value]'
单词'newProductsInfo'
和一个空格' '
总是在字符串数组之前。
[1] - $2 dollars
[2] New Product
[3] Hello
[4]Same, [5]Value //should be returned since the comma is followed by a space ' '
在Regex101 site中。
当前,使用(?<=newProductsInfo: \[)[^,\]]+
仅返回[1
。
编辑:在气泡插件创建器中添加了可能的返回类型:
2条答案
按热度按时间fnx2tebb1#
您的模式(标记为JavaScript)仅匹配
[1
,因为取反的字符类[^,\]]+
无法交叉匹配逗号或]
如果只需要匹配项,则可以在左侧Assert
newProductsInfo:
,后跟任意字符从方括号中的数字开始匹配,直到前面有逗号的下一个匹配项或字符串的结尾。
对其使用lookbehindAssert(参见support):
Regex demo
编辑
如果你想使用PHP:
说明
(?:
备选项的非捕获组newProductsInfo: \[
匹配newProductsInfo: [
|
或\G(?!^)
在上一个匹配的结尾而不是开头Assert当前位置)
关闭非捕获组,?\K
匹配一个可选逗号并忽略目前匹配的内容(?>,\h+[^,\n]+)*
(可选)重复匹配逗号、1+个空格和1+个字符,而不是,
或换行符Regex demo
gwbalxhn2#
下面是使用
match()
的一种方法:对
replace()
的调用会去掉前导/尾随的[
和]
。对split()
的调用会在每个逗号处拆分输入字符串,逗号后面跟着一个带编号的括号项,如[2]
。