mirror of
https://github.com/mikefarah/yq.git
synced 2025-01-12 19:25:37 +00:00
Fixed bad cature groups with multiple matches #1114
This commit is contained in:
parent
304fc462a4
commit
fc447b46ce
@ -105,14 +105,14 @@ will output
|
|||||||
captures: []
|
captures: []
|
||||||
```
|
```
|
||||||
|
|
||||||
## Match with capture groups
|
## Match with global capture group
|
||||||
Given a sample.yml file of:
|
Given a sample.yml file of:
|
||||||
```yaml
|
```yaml
|
||||||
abc abc
|
abc abc
|
||||||
```
|
```
|
||||||
then
|
then
|
||||||
```bash
|
```bash
|
||||||
yq '[match("(abc)+"; "g")]' sample.yml
|
yq '[match("(ab)(c)"; "g")]' sample.yml
|
||||||
```
|
```
|
||||||
will output
|
will output
|
||||||
```yaml
|
```yaml
|
||||||
@ -120,16 +120,22 @@ will output
|
|||||||
offset: 0
|
offset: 0
|
||||||
length: 3
|
length: 3
|
||||||
captures:
|
captures:
|
||||||
- string: abc
|
- string: ab
|
||||||
offset: 0
|
offset: 0
|
||||||
length: 3
|
length: 2
|
||||||
|
- string: c
|
||||||
|
offset: 2
|
||||||
|
length: 1
|
||||||
- string: abc
|
- string: abc
|
||||||
offset: 4
|
offset: 4
|
||||||
length: 3
|
length: 3
|
||||||
captures:
|
captures:
|
||||||
- string: abc
|
- string: ab
|
||||||
offset: 4
|
offset: 4
|
||||||
length: 3
|
length: 2
|
||||||
|
- string: c
|
||||||
|
offset: 6
|
||||||
|
length: 1
|
||||||
```
|
```
|
||||||
|
|
||||||
## Match with named capture groups
|
## Match with named capture groups
|
||||||
|
@ -136,19 +136,19 @@ func match(matchPrefs matchPreferences, regEx *regexp.Regexp, candidate *Candida
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i, matches := range allMatches {
|
for i, matches := range allMatches {
|
||||||
capturesNode := &yaml.Node{Kind: yaml.SequenceNode}
|
capturesListNode := &yaml.Node{Kind: yaml.SequenceNode}
|
||||||
match, submatches := matches[0], matches[1:]
|
match, submatches := matches[0], matches[1:]
|
||||||
for j, submatch := range submatches {
|
for j, submatch := range submatches {
|
||||||
captureNode := &yaml.Node{Kind: yaml.MappingNode}
|
captureNode := &yaml.Node{Kind: yaml.MappingNode}
|
||||||
captureNode.Content = addMatch(capturesNode.Content, submatch, allIndices[i][2+j*2], subNames[j+1])
|
captureNode.Content = addMatch(captureNode.Content, submatch, allIndices[i][2+j*2], subNames[j+1])
|
||||||
capturesNode.Content = append(capturesNode.Content, captureNode)
|
capturesListNode.Content = append(capturesListNode.Content, captureNode)
|
||||||
}
|
}
|
||||||
|
|
||||||
node := &yaml.Node{Kind: yaml.MappingNode}
|
node := &yaml.Node{Kind: yaml.MappingNode}
|
||||||
node.Content = addMatch(node.Content, match, allIndices[i][0], "")
|
node.Content = addMatch(node.Content, match, allIndices[i][0], "")
|
||||||
node.Content = append(node.Content,
|
node.Content = append(node.Content,
|
||||||
createScalarNode("captures", "captures"),
|
createScalarNode("captures", "captures"),
|
||||||
capturesNode,
|
capturesListNode,
|
||||||
)
|
)
|
||||||
results.PushBack(candidate.CreateReplacement(node))
|
results.PushBack(candidate.CreateReplacement(node))
|
||||||
|
|
||||||
|
@ -30,11 +30,11 @@ var stringsOperatorScenarios = []expressionScenario{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Match with capture groups",
|
description: "Match with global capture group",
|
||||||
document: `abc abc`,
|
document: `abc abc`,
|
||||||
expression: `[match("(abc)+"; "g")]`,
|
expression: `[match("(ab)(c)"; "g")]`,
|
||||||
expected: []string{
|
expected: []string{
|
||||||
"D0, P[], (!!seq)::- string: abc\n offset: 0\n length: 3\n captures:\n - string: abc\n offset: 0\n length: 3\n- string: abc\n offset: 4\n length: 3\n captures:\n - string: abc\n offset: 4\n length: 3\n",
|
"D0, P[], (!!seq)::- string: abc\n offset: 0\n length: 3\n captures:\n - string: ab\n offset: 0\n length: 2\n - string: c\n offset: 2\n length: 1\n- string: abc\n offset: 4\n length: 3\n captures:\n - string: ab\n offset: 4\n length: 2\n - string: c\n offset: 6\n length: 1\n",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user