2016-05-31 4 views
-3

Ich habe eine Reihe von html:Wie HTML-Eingabewert in Ruby ersetzen?

string = "<input type=text name='email' value='[email protected]'> <input type=hidden name='pin' value='123'>" 

Und ich möchte den Wert von email zu Sternen ersetzen *******

"<input type=text name='email' value='*******'> <input type=hidden name='pin' value='123'>" 

so etwas wie dieses habe ich:

string.gsub(/<input(.*?)name='email'(.*)value='(.*?)'/, '*******') 

https://regex101.com/r/dO1uJ3/2

Ich weiß, dass meine Regex ungültig ist, also bitte um Hilfe.

ps Ich will nicht Nokogiri verwenden, einfach nur mit String regex

+0

downvoter, was ist los? – user2931706

+1

Ich habe nicht abgestimmt, aber Sie * wirklich * wollen einen richtigen HTML-Parser und keinen regulären Ausdruck verwenden. Code wie dieser neigt dazu, extrem brüchig zu sein und bricht zusammen, wenn sich selbst die kleinsten Dinge ändern. Ändern Sie den Zitatstil, vergessen Sie die Anführungszeichen, wechseln Sie die Reihenfolge der Attribute, all diese Dinge können und werden geschehen. – tadman

Antwort

1

erstellen Einfanggruppen (()) vor und nach dem, was Sie ersetzen wollen, sie dann für \1****\2 Ersatz verwenden, das heißt:

result = subject.gsub(/('email'\s+value=').*?('>)/i, '\1*****\2') 

https://regex101.com/r/dO1uJ3/1


+0

danke, '\ 1 **** \ 2' was ist der Zweck von' \ 1' und '\ 2'? – user2931706

+0

'\ 1' und' \ 2' repräsentieren die Fanggruppen, die wir zuvor mit '()' aufgenommen haben –

Verwandte Themen