Use the grok filter. I'm not 100% sure what result you expect from the example input string, but if you want the text inside the two single-quoted strings the following should work:
grok {
match => [
"name-of-field",
"@name='(?<name1>[^']+)'.*@name='(?<name2>[^']+)'"
]
]
If the single-quoted strings themselves can contain single quotes that are escaped somehow it'll take some more care.