summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2015-06-19 01:28:18 +0200
committerAndreas Rumpf <rumpf_a@web.de>2015-06-19 01:28:18 +0200
commit37ff086c86129602c34f660cd4193c9a02273f81 (patch)
tree727e31dcc47d5479817d3988a628efedb03d8067
parentd7e680331c08a5bcd178f0f2184377cfa940e4a6 (diff)
parent90292754f579efca3672970a2f5d40630936d013 (diff)
downloadNim-37ff086c86129602c34f660cd4193c9a02273f81.tar.gz
Merge pull request #2940 from flaviut/fix-nre-20
Fix nre issue #20
-rw-r--r--lib/impure/nre.nim8
-rw-r--r--tests/stdlib/nre/split.nim1
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/impure/nre.nim b/lib/impure/nre.nim
index 6f92b0d71..973f1f2ee 100644
--- a/lib/impure/nre.nim
+++ b/lib/impure/nre.nim
@@ -586,9 +586,12 @@ proc split*(str: string, pattern: Regex, maxSplit = -1, start = 0): seq[string]
   result = @[]
   var lastIdx = start
   var splits = 0
-  var bounds = 0 .. 0
+  var bounds = 0 .. -1
+  var never_ran = true
 
   for match in str.findIter(pattern, start = start):
+    never_ran = false
+
     # bounds are inclusive:
     #
     # 0123456
@@ -615,7 +618,8 @@ proc split*(str: string, pattern: Regex, maxSplit = -1, start = 0): seq[string]
   # "12".split("\b") would be @["1", "2", ""], but
   # if we skip an empty last match, it's the correct
   # @["1", "2"]
-  if bounds.a <= bounds.b or bounds.b < str.high:
+  # If matches were never found, then the input string is the result
+  if bounds.a <= bounds.b or bounds.b < str.high or never_ran:
     # last match: Each match takes the previous substring,
     # but "1 2".split(/ /) needs to return @["1", "2"].
     # This handles "2"
diff --git a/tests/stdlib/nre/split.nim b/tests/stdlib/nre/split.nim
index 8064e40b7..9d57ea7d8 100644
--- a/tests/stdlib/nre/split.nim
+++ b/tests/stdlib/nre/split.nim
@@ -8,6 +8,7 @@ suite "string splitting":
     check("1 2".split(re(" ")) == @["1", "2"])
     check("foo".split(re("foo")) == @["", ""])
     check("".split(re"foo") == @[""])
+    check("9".split(re"\son\s") == @["9"])
 
   test "captured patterns":
     check("12".split(re"(\d)") == @["", "1", "", "2", ""])