我正在尝试使用JavaScript中的正则表达式和拆分函数拆分字符串。
例如,我有一个字符串:
olej sojowy, sorbitol, czerwień koszenilową
我的RegEx是:
/, (?!(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的行为?
答案 0 :(得分:1)
它完全按照预期工作。您已使用,
作为分隔符,因此它为您提供了五个元素:
[1] olej sojowy
[2]
[3] sorbitol
[4]
[5] czerwień koszenilową
空元素是分割所在位置的指示符。
答案 1 :(得分:0)
如果separator是包含捕获括号的正则表达式,则每次匹配时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。但是,并非所有浏览器都支持此功能。
如果split
中的正则表达式包含捕获组,则每个组的内容也会插入到结果中。由于你有一个捕获组(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);
没有捕获组,因此在删除匹配的正则表达式后,您只获得剩余的文本。