Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式文本匹配_Javascript_Regex_Match - Fatal编程技术网

Javascript 正则表达式文本匹配

Javascript 正则表达式文本匹配,javascript,regex,match,Javascript,Regex,Match,我写了一些regexp。当我在控制台中使用键入的字符串执行它时,它会工作,但在某些情况下,脚本中不会 以下是我的控制台输出: >正文 [“版本:2.1”,“N:;S Wicius;;;”,“FN:S Wicius”,“电话;首选;手机:000000000”] >记录行 /^([^:;]+)(?:;([^:]+)?:(.+)$/gm >records.line.exec(正文[1]) 无效的 >正文[1]=“N:;S Wicius;;” 真的 >records.line.exec(“N:;S Wi

我写了一些regexp。当我在控制台中使用键入的字符串执行它时,它会工作,但在某些情况下,脚本中不会

以下是我的控制台输出:

>正文
[“版本:2.1”,“N:;S Wicius;;;”,“FN:S Wicius”,“电话;首选;手机:000000000”]
>记录行
/^([^:;]+)(?:;([^:]+)?:(.+)$/gm
>records.line.exec(正文[1])
无效的
>正文[1]=“N:;S Wicius;;”
真的
>records.line.exec(“N:;S Wicius;;”)
[“N:;S Wicius;;;”,“N”,未定义,“S Wicius;;;”]
>对于(变量i=0;i
它看起来像
body[1]
实际上不是一个字符串,而是一个对象,其“ToPrimitive”操作产生
“N:;S Wicius;;;”
。因此,尽管
body[1]=“N:;S Wicius;;”
真的
(如您所见),
body[1]=“N:;S Wicius;;”
将是
假的

如果要对
body[1]
的字符串值执行正则表达式匹配,可以执行以下操作:

records.line.exec( '' + body[1] )

看起来
body[1]
实际上不是一个字符串,而是一个对象,其“ToPrimitive”操作产生
“N:;S Wicius;;”
。因此,尽管
body[1]=“N:;S Wicius;;”
真的
(如您所见),
body[1]=“N:;S Wicius;;”
将是
假的

如果要对
body[1]
的字符串值执行正则表达式匹配,可以执行以下操作:

records.line.exec( '' + body[1] )

那么这个问题呢是由以下因素综合造成的:

  • records.line在每次迭代中都是相同的对象
  • 正则表达式是用/g修饰符和
  • exec
    方法更改regexp对象的属性
  • lastIndex是RegExp对象的读/写属性。定期 表达式,它包含一个 指定紧跟在最后一次匹配之后的字符位置 由RegExp.exec()和RegExp.test()方法找到。这些方法 使用此属性作为下一次搜索的起点 行为

    此属性允许您重复调用这些方法,以 循环遍历字符串中的所有匹配项,并且仅当“g”为 修改器已设置


    您可以通过更改这3个条件中的任何一个来修复此问题(您还可以在每次迭代中手动重置
    records.line.lastIndex=0
    )。您的/g修饰符似乎没用,所以请将其删除。

    好吧,问题是由以下因素组合而成的:

  • records.line在每次迭代中都是相同的对象
  • 正则表达式是用/g修饰符和
  • exec
    方法更改regexp对象的属性
  • lastIndex是RegExp对象的读/写属性。定期 表达式,它包含一个 指定紧跟在最后一次匹配之后的字符位置 由RegExp.exec()和RegExp.test()方法找到。这些方法 使用此属性作为下一次搜索的起点 行为

    此属性允许您重复调用这些方法,以 循环遍历字符串中的所有匹配项,并且仅当“g”为 修改器已设置


    您可以通过更改这3个条件中的任何一个来修复此问题(您还可以在每次迭代中手动重置
    records.line.lastIndex=0
    )。您的/g修饰符似乎没用,所以请将其删除。

    您想做什么?你能解释得更清楚一点吗?
    body[1]
    确实是那个字符串,而且
    body
    不是稀疏数组吗?body[1]的类型产生“字符串”。我想解析它以解析“body”数组中的所有字符串。
    body
    是由
    \n
    分割的文本。这会引起问题吗?你想做什么?你能解释得更清楚一点吗?
    body[1]
    确实是那个字符串,而且
    body
    不是稀疏数组吗?body[1]的类型产生“字符串”。我想解析它以解析“body”数组中的所有字符串。
    body
    是由
    \n
    分割的文本。这会导致问题吗?
    body[1]==“N:;S Wicius;;;”
    为真
    records.line.exec(“”+body[1])
    可以工作,但它是一种变通方法:我错了
    records.line.exec(“”+body[1])
    工作,但仅在控制台中工作。
    body[1]==“N:;S Wicius;;”
    为true
    records.line.exec(“”+body[1])
    可以工作,但它是一种变通方法:我错了
    records.line.exec(“”+body[1])
    可以工作,但只能在控制台中工作。就是这样/g修改器不应该在那里!就这样/g修改器不应该在那里!