javascript PCRE2(PHP>=7.3)正向查找正则表达式,用于搜索以,““分隔的字符串

vngu2lb8  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(72)

我有这样的字符串:

'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

编辑:在气泡插件创建器中添加了可能的返回类型:

fnx2tebb

fnx2tebb1#

您的模式(标记为JavaScript)仅匹配[1,因为取反的字符类[^,\]]+无法交叉匹配逗号或]
如果只需要匹配项,则可以在左侧AssertnewProductsInfo:,后跟任意字符
从方括号中的数字开始匹配,直到前面有逗号的下一个匹配项或字符串的结尾。
对其使用lookbehindAssert(参见support):

(?<=newProductsInfo: .*?)\[\d+].*?(?=,\[\d+]|$)

Regex demo

编辑

如果你想使用PHP:

(?:newProductsInfo: \[|\G(?!^)),?\K[^,\n]+(?>,\h+[^,\n]+)*

说明

  • (?:备选项的非捕获组
  • newProductsInfo: \[匹配newProductsInfo: [
  • |
  • \G(?!^)在上一个匹配的结尾而不是开头Assert当前位置
  • )关闭非捕获组
  • ,?\K匹配一个可选逗号并忽略目前匹配的内容
  • x1米11米1x
  • (?>,\h+[^,\n]+)*(可选)重复匹配逗号、1+个空格和1+个字符,而不是,或换行符

Regex demo

gwbalxhn

gwbalxhn2#

下面是使用match()的一种方法:

var input = 'newProductsInfo: [[1] - $2 dollars,[2] New Product,[3] Hello,[4]Same, [5]Value]';
var matches = input.replace(/^.*?\[(?=\[\d+\])|\]$/g, "")
                   .split(/,(?=\[\d+\])/);
console.log(matches);

replace()的调用会去掉前导/尾随的[]。对split()的调用会在每个逗号处拆分输入字符串,逗号后面跟着一个带编号的括号项,如[2]

相关问题