使用JS拆分函数得到不同的RegEx结果-结果为空字符串
Different results of RegEx using JS split function - empty strings in result
我试图在JavaScript中使用正则表达式和拆分函数拆分字符串。例如,我有一个字符串:olej sojowy, sorbitol, czerwień koszenilową
我的正则表达式是:
/, (?!(któ))/g
当我在这里测试时:http://regexr.com/38ps8我得到2个匹配,如预期的那样,所以在结果中,我应该得到3个元素后分裂。
但是当我尝试在split函数中使用这个表达式时:
var parts="olej sojowy, sorbitol, czerwień koszenilową".split(/, (?!(któ))/g);
console.log("Num of elements:" + parts.length);
console.log(parts.join("!'n!"));
的结果是不同的,它返回5个元素在一个数组中,有两个额外的空字符串:
Num of elements:5
olej sojowy!
!!
!sorbitol!
!!
!czerwień koszenilową
为什么不像预期的那样工作?这是分裂函数的问题吗?它是否以与我期望的不同的方式使用正则表达式?
编辑:我刚刚还注意到,如果我将正则表达式更改为/,/g,那么我就得到了我想要的(结果中有3个元素),但是还有其他字符串,如果在逗号和空格之后有któ,我不想分割。那么为什么这个运算符要改变split的行为呢?
一切正常。您使用,
作为分隔符,因此它提供了五个元素:
[1] olej sojowy
[2]
[3] sorbitol
[4]
[5] czerwień koszenilową
空元素是分隔符所在位置的指示符。
来自Mozilla的JS ref:
如果separator是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)将被拼接到输出数组中。但是,并非所有浏览器都支持此功能。
如果split
中的regex包含捕获组,则将每个组的内容也插入到结果中。因为你有一个捕获组(któ)
,这就是你得到的。它是空的,因为(?!(któ))
为空。如果您在字符串的任何地方添加文本, któ
,您将看到它出现:
var parts="olej sojowy, któ sorbitol, czerwień koszenilową".split(/, (?!(któ))/g);
显示3个元素。令人惊讶的是,第二个是", "
。然后,它是któ
跟随的(不确定我如何"证明"这一点)。
如果你省略了前面的括号,它会像你期望的那样工作:
var parts="olej sojowy, któ sorbitol, czerwień koszenilową".split(/, (?!któ)/g);
没有捕获组,因此在删除匹配的regex后,您只获得剩余的文本。
- Regex模式匹配,从Javascript中的字符串中提取时间,结果出乎意料
- 将Javascript Regex结果转换为字符串(?)
- JavaScript Regex在执行后会有不同的结果
- Regex exec函数在Javascript中未返回正确的结果
- 如何使用regex在以前的搜索结果中进行搜索和替换
- Javascript:如何在RegEx .exec结果中获取多个匹配项
- 使用/../时的不同结果以及RegEx与exec
- java脚本regex.match只查找一个结果
- Javascript替换regex剪切结果
- 根据RegEx模式筛选结果
- regex.test()函数没有给出正确的结果
- JavaScript Regex:记住一个匹配而不会得到“未定义”的结果
- Javascript通配符regex搜索结果不一致
- Regex JavaScript字符串并将结果存储到变量中
- Regex在javascript与组意外结果
- Javascript RegEx在结果上添加逗号
- Regex for date的计算结果为true,即使字符错误
- 在为字符串创建自定义regex-camelCase解决方案时,Javascript错误的结果
- Firefox 3.6.20 regex给出不一致的结果
- regex的意外结果