<select class="form-control" name="work_status">
<option value="">Working With</option>
<option value="Private Company">Private Company</option>
<option value="Government/ Public sector">Government/Public Sector</option>
<option value="Government/ Public sector">Defense/Civil Services</option>
<option value="Government/ Public sector">Business/Self Employed</option>
<option value="Government/ Public sector">Not Working</option>
</select>
Here I want to remove all <option value="Ignore this">. This means I want to replace <option value=""> with "" and <option value="Private Company"> with "". I.e. I want to ignore word inside value attribute. How can I do this?
You must specify a language but for the regex part you can use this : value="(.+)"
Regex101
Anyway you dont need Regex. You can do this with javascript. Let say you use jQuery:
$('.form-control option').each(function(){
$(this).attr('value',"");
});
Related
I have to capture the values of options in the <select name="fromPort"> and <select name="toPort"> separately for correlation using loadrunner.
I have written the regular expression as
<select name="fromPort" class="form-inline">(.+?)</select>
for capturing from first but it shows that there is no match.
<form action="reserve.php" method="post">
<select name="fromPort" class="form-inline">
<option value="Paris">Paris</option>
<option value="Philadelphia">Philadelphia</option>
<option value="Boston">Boston</option>
<option value="Portland">Portland</option>
<option value="San Diego">San Diego</option>
<option value="Mexico City">Mexico City</option>
<option value="São Paolo">São Paolo</option>
</select>
<p>
<h2>Choose your destination city:</h2>
<select name="toPort" class="form-inline">
<option value="Buenos Aires">Buenos Aires</option>
<option value="Rome">Rome</option>
<option value="London">London</option>
<option value="Berlin">Berlin</option>
<option value="New York">New York</option>
<option value="Dublin">Dublin</option>
<option value="Cairo">Cairo</option>
</select>
<p></p>
<div class="container">
<input type="submit" class="btn btn-primary" value="Find Flights"/>
</div>
</form>
When I try with notepad++, there is a checkbox to select when there are multiple lines of response to be captured. When I check it, the same regular expression is working.enter code here
My answer is less elegant, considering you have multiple similar tags involved on the from/to side of the house. I am going to suggest backing up, capturing with a LB condition of either \"fromPort" class=\"form-inline\"\n" or \"toPort" class=\"form-inline\"\n" to an end tag of "\n"
You will wind up with two string variables, such as "Correlated_from" and "Correlated_to" which contain the option values. Next is conversion to an array structure.
There are likely a dozen ways that you can take the string apart, but I would recommend a function that breaks on the newline character, jumps the first "\t\t" Character in the substring, saving out the value between that and the next "<" character. As noted previously, there are likely a dozen ways to break up this string with a defined pattern to get to the substring which interests you.
By adhering to the standard LoadRunner pseudo array structure, this opens up the use of the standard LoadRunner functions for assignment of a variable from a pseudo array - The lr_paramarr_* function set.
You can try this
Well what i have done is.
Extracted all the options from the select matching select tag using this
(?:<select name="(fromPort|toPort)" class="form-inline">\s+)([\w\W]+?)(?=\s+<\/select>)
Than split each option as single element into an array.
Than extracted value from each option using this regex.
(?<=\s*?<option value=")(.*?)(?=">.*?<\/option>)
let str =`<form action="reserve.php" method="post">
<select name="fromPort" class="form-inline">
<option value="Paris">Paris</option>
<option value="Philadelphia">Philadelphia</option>
<option value="Boston">Boston</option>
<option value="Portland">Portland</option>
<option value="San Diego">San Diego</option>
<option value="Mexico City">Mexico City</option>
<option value="São Paolo">São Paolo</option>
</select>
<p>
<h2>Choose your destination city:</h2>
<select name="toPort" class="form-inline">
<option value="Buenos Aires">Buenos Aires</option>
<option value="Rome">Rome</option>
<option value="London">London</option>
<option value="Berlin">Berlin</option>
<option value="New York">New York</option>
<option value="Dublin">Dublin</option>
<option value="Cairo">Cairo</option>
</select>
<p></p>
<div class="container">
<input type="submit" class="btn btn-primary" value="Find Flights"/>
</div>
</form>`
let selectAllOption = str.match(/(?<=<select name="(fromPort|toPort)" class="form-inline">\s+)[\w\W]+?(?=\s+<\/select>)/g);
let splitedOptions = selectAllOption.map(e=>e.split('\n'))
let finalValues = splitedOptions.map(e=>{
return e.map(ele=>{
return ele.match(/(?<=\s*?<option value=")(.*?)(?=">.*?<\/option>)/g)
})
})
console.log(finalValues);
I extract the select using LB="select id="xxxx"" and RB="</select"
Then use something like the following to get either all options (if I want to randomize which one is submitted the script, or I pick the already selected one, if I want to submit what the default selection is. Whenever I need to use complex regular expressions I usually hardcode a test case into a temporary test action to test the logic out before hitting the actual application.
TestExtract()
{
int matchCt, ord;
char *arrayMemberValue;
char * bufferToSearch =
"<option value=\"8183011816-1:USD\"";
char * bufferToSearch2 =
" <option value=\"8171245851-1:USD\">xxxxxx5851 - DDA 008171245851</option>"
" <option value=\"863006969-1:USD\">xxxxxx6969 - DDA 000863006969</option>"
" <option value=\"863006977-1:USD\">xxxxxx6977 - DDA 000863006977</option> ";
char * bufferToSearch3 =
" <option value=\"125\">AIRLINE PILOT</option> "
" <option value=\"008\" selected=\"selected\">SELF EMPLOYED</option>"
" <option value=\"232\">RECEPTIONIST</option>";
char * bufferToSearch4 =
"<select id=\"occupation\" name=\"occupation\" onchange='occupationChange();' class='form-control required' data-validate='dropdown'> "
" <option value=\"125\">AIRLINE PILOT</option> "
" <option value=\"008\" selected=\"selected\">SELF EMPLOYED</option>"
" <option value=\"232\">RECEPTIONIST</option>"
"</select>"
"<select name=\"_address_state_pr\" id=\"_address_ state_p\" class=\"form-control\">"
" <option value=\"Adjuntas\" selected>Adjuntas</option>"
" <option value=\"Aguada\"> Aguada</option>"
" <option value=\"Aguadilla\">\tAguadilla\t</option>"
" <option value=\"Aguas Buenas\">\tAguas Buenas\t</option>"
"</select>";
lr_output_message ("Test Regexp Extract");
lr_save_param_regexp (
bufferToSearch,
strlen(bufferToSearch),
"RegExp=option value=\"(.*?)\"",
"ResultParam=fromAccount",
LAST );
lr_output_message ("Value of fromAccount in buffer1 = %s", lr_eval_string("{fromAccount}"));
lr_save_param_regexp (
bufferToSearch2,
strlen(bufferToSearch2),
"RegExp=option value=\"(.*?)\"",
"Ordinal=All",
"ResultParam=reMatchesParam",
LAST );
matchCt = lr_paramarr_len("reMatchesParam");
lr_message("%d match(es) found in buffer2.", matchCt);
for (ord=1; ord <= matchCt; ord++)
{
arrayMemberValue = lr_paramarr_idx("reMatchesParam", ord);
lr_message("Member %d value: %s", ord, arrayMemberValue);
}
// find selected option - use a non capturing group to skip the greedy RegExp for prior Option values
// https://regex101.com/
// PCRE (?:value=".*").*value=(.*?) selected
lr_save_param_regexp (
bufferToSearch3,
strlen(bufferToSearch3),
"RegExp=(?:value=\".*\").*value=\"(.*?)\" selected",
"Ordinal=1",
"ResultParam=reSelectedOption",
LAST );
lr_output_message ("Value of selected option in buffer3 = %s", lr_eval_string("{reSelectedOption}"));
// normally will use web_reg_save_param_ex with LB and RB to extract the specific select statement
lr_save_param_regexp (
bufferToSearch4,
strlen(bufferToSearch4),
"RegExp=select id=\"occupation\"(.*?)</select>",
"Ordinal=1",
"ResultParam=reOptionGroupOccupation",
LAST );
lr_output_message ("Value of option group occupation in buffer4 is = %s", lr_eval_string("{reOptionGroupOccupation}"));
lr_save_param_regexp (
lr_eval_string("{reOptionGroupOccupation}"),
strlen( lr_eval_string("{reOptionGroupOccupation}")),
"RegExp=(?:value=\".*\").*value=\"(.*?)\" selected",
"Ordinal=1",
"ResultParam=reSelectedOption",
LAST );
lr_output_message ("Value of selected occupation option in buffer4 = %s", lr_eval_string("{reSelectedOption}"));
return -1; // iterate no further
}
Suppose This is my text
SET abc "<select name="ctl00$ContentPlaceHolder1$ddlyear" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddlyear\',\'\')', 0)" id="ctl00_ContentPlaceHolder1_ddlyear" class="page-heading" style="background-color: rgb(255, 244, 244); width: 95px; outline: 1px solid blue;"> <option selected="selected" value="Select Year">Select Year</option> <option value="2000">2000</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
<option value="2016">2016</option>
<option value="2017">2017</option>
</select>"
And I just want to extract years from the above text, so I matched the staring string as <option value= and ending string as </option> and get the string between these two pattern
SET text EVAL("var s=\"{{abc}}\"; s.match(\"(?![<option value=])(.*)(?=</option>)\");")
But it gives the entire text again
And if I do
SET text EVAL("var s=\"{{abc}}\"; s.match(\"(?![<option value=])(.*)(?=</option>)\");s[0]")
This gives me "<"
Any suggestion where I'm going wrong?
Thanks
I think you can try a simpler way like this:
TAG XPATH="id('ctl00_ContentPlaceHolder1_ddlyear')" EXTRACT=TXTALL
SET numbers EVAL("'{{!EXTRACT}}'.replace('Select Year[OPTION]', '');")
PROMPT {{numbers}}
I can't test an imacros version, but your plain regex is wrongfully using square brackets and negative lookahead.
Here is a regex that matches what you are looking for (all digits before an </option>) :
([0-9]*)(?=</option>)
Demo here :
https://regex101.com/r/jA3Al9/2
Edit : as I said I can't test it but I guess you are looking for :
SET text EVAL("var s=\"{{abc}}\"; s.match(\"([0-9]*)(?=</option>)\");s[0]")
From #Shugar's answer added few lines to get the answer
TAG XPATH="id('ctl00_ContentPlaceHolder1_ddlyear')" EXTRACT=TXTALL
SET numbers EVAL("'{{!EXTRACT}}'.replace('Select Year[OPTION]', '');")
SET numb1 EVAL("'{{numbers}}'.replace(/[OPTION]/g,'');")
SET numb2 EVAL("'{{numb1}}'.split('[]')")
PROMPT {{numb2}}
I'm trying to find all values and replace with following pattern :
<option value="">text1343 </option>
<option value="">text2yt4</option>
<option value="">text34ug</option>
<option value="">defffe</option>
<option value="">ewewe</option>
What do I want?
I want to copy the text between <option value=""> AND </option> then paste it between "".
like this :
<option value="text1343">text1343 </option>
How can I do a replacement?
find value
value="">(.*)?(<)
replace with
value="$1">$1<
Find: <option value="">(.*)</option>
Replace with: <option value="\1">\1</option>
I need some help ...
I need the location drop down box to determine the appropriate inbox the form should be sent to.
ex if I choose Houston from the drop down box it will send it to the PayrollUSA email.
Im currently using a radio button to make the selection but i would like to automate with the drop down.
Im pretty new to this but im sure theres a if statement that can tie them together...
im using .asp for this.
<input type="radio" name="payroll" value="PayrollUSA#mail.com" checked="checked">US Payroll
<input type="radio" name="payroll" value="PayrollCAN#mail.com">CAN Payroll
<input type="radio" name="payroll" value="PayrollUK#mail.com">UK Payroll
<input type="radio" name="payroll" value="PayrollHK#mail.com">HK Payroll
Drop down selection
<SELECT SIZE="1" NAME="Business_Unit" style="width: 205px;" class="answers">
<option selected >Select</option>
<OPTION>Calgary</OPTION>
<OPTION>Chicago</OPTION>
<OPTION>Hong Kong</OPTION>
<OPTION>Houston</OPTION>
<OPTION>London</OPTION>
<OPTION>Los Angeles</OPTION>
<OPTION>Montreal</OPTION>
<OPTION>New York</OPTION>
<OPTION>New York Corporate</OPTION>
<OPTION>Philadelphia</OPTION>
<OPTION>San Francisco</OPTION>
<OPTION>Toronto</OPTION>
<OPTION>Toronto Corporate</OPTION>
<OPTION>Vancouver</OPTION>
</SELECT>
If you need the option value to be held then try this:
<SELECT SIZE="1" NAME="Business_Unit" style="width: 205px;" class="answers">
<option value="">Select an Option</option>
<option <% if Business_Unit= "PayrollCAN#mail.com" then %> selected <% End if %> value="PayrollCAN#mail.com">Calgary</option>
<option <% if Business_Unit= "PayrollUSA#mail.com" then %> selected <% End if %> value="PayrollUSA#mail.com">Chicago</option>
</select>
etc. for each option and same value may be used for different option displays
I imaging this should just be html based. So your option menu should look like:
<SELECT SIZE="1" NAME="Business_Unit" style="width: 205px;" class="answers">
<option value="-1">Select an Option</option>
<OPTION value="PayrollCAN#mail.com">Calgary</OPTION>
<OPTION value="PayrollUSA#mail.com">Chicago</OPTION>
<OPTION value="PayrollHK#mail.com">Hong Kong</OPTION>
<OPTION value="PayrollUSA#mail.com">Houston</OPTION>
<OPTION value="PayrollUK#mail.com">London</OPTION>
<OPTION value="PayrollUSA#mail.com">Los Angeles</OPTION>
<OPTION value="PayrollCAN#mail.com">Montreal</OPTION>
<OPTION value="PayrollUSA#mail.com">New York</OPTION>
<OPTION value="PayrollUSA#mail.com">New York Corporate</OPTION>
<OPTION value="PayrollUSA#mail.com">Philadelphia</OPTION>
<OPTION value="PayrollUSA#mail.com">San Francisco</OPTION>
<OPTION value="PayrollCAN#mail.com">Toronto</OPTION>
<OPTION value="PayrollCAN#mail.com">Toronto Corporate</OPTION>
<OPTION value="PayrollCAN#mail.com">Vancouver</OPTION>
</SELECT>
You can use the same value multiple times if needed
I have this html, and I want to replace the numeric value within value="##" with the value between <option>value</option>
For example: <option value="16">Accounting</option>, I want to know the regex it'd take to automatically change it to <option value="Accounting">Accounting</option>
I plan on doing it to this entire list.
<option value="16">Accounting A.A.S.</option>
<option value="15">Accounting A.S.</option>
<option value="33">Art Studies</option>
<option value="18">Business Administration A.A.S.</option>
<option value="17">Business Administration A.S.</option>
<option value="20">Computer Network Technician</option>
<option value="21">Computer Support Specialist</option>
<option value="40">Criminal Justice A.A.S.</option>
<option value="39">Criminal Justice A.S.</option>
<option value="37">Criminal Justice: Corrections Certificate</option>
<option value="41">Criminal Justice: Cybersecurity</option>
<option value="42">Criminal Justice: Economic Crime</option>
<option value="43">Criminal Justice: Forensic Investigation</option>
<option value="34">Early Childhood</option>
<option value="22">Fashion Buying & Merchandising</option>
<option value="35">Fine Arts</option>
<option value="23">Health Services Management A.S.</option>
<option value="24">Health Services Management Technology A.A.S.</option>
<option value="92">Human Resource Management A.A.S.</option>
<option value="44">Human Services</option>
<option value="25">International Business</option>
<option value="36">Liberal Arts & Sciences: Childhood Education</option>
<option value="49">Liberal Arts & Sciences: Communication Arts</option>
<option value="50">Liberal Arts & Sciences: General Studies</option>
<option value="52">Liberal Arts & Sciences: Social Science</option>
<option value="51">Liberal Arts and Sciences: Humanities</option>
<option value="26">Marketing A.A.S.</option>
<option value="27">Medical Coder/Transcriptionist Certificate</option>
<option value="45">Music Industry</option>
<option value="28">Paralegal</option>
<option value="46">Photographic Technology</option>
<option value="47">Radio/Television Broadcasting</option>
<option value="91">Science A.S.</option>
<option value="29">Small Business Management</option>
<option value="30">Small Business Management: Certificate</option>
<option value="48">Teaching Assistant: Certificate</option>
<option value="31">Travel & Tourism: Hospitality & Events Management</option>
<option value="32">Website and E-Business Development</option>
EDIT: I want to use GREP, within textwrangler
Just remove the value attributes. <option> by default takes a value of it's content.
<option value="Accounting">Accounting</option>
is equivalent to:
<option>Accounting</option>
Edit: using sed you can do
sed -r s/' value="[0-9]+"'//g
I assume this means you want:
<option value="14">Foobar</option>
To become:
<option value="Foobar">Foobar</option>
If so, here's the Javascript. I assume the select variable contains the surrounding <select> tag DOM element, e.g. by form.nameOfselect.
for ( var option : select.options ) {
option.value = option.text;
}
Under Linux:
sed 's|<option value="[^"]*">\([^<>]*\)</option>|<option value="\1">\1</option>|g'
If your HTML is well-formed, this will do the trick:
Regex:
(?<=<option) value="\d+"
Replace with the empty string.
In HTML, option values fall back automatically to the displayed text, if no value attribute is present.
You've added that you want to perform the operation in a text editor. I wrote something assuming you'd want to use php, and I'll let it stand here because I think it's important.
Anyway, using TextWrangler (or any other text editor), replace
<option value="[^"]*">([^<]*)</option>
with
<option value="\1">\1</option>
As you're mostly active in the php tag, I assume you're asking for a solution in php. However, let me begin this answer with an advice: If you are looking for a way, state your goal, not a technology you think is suitable. regexps work, but this is far easier in simplexml:
$xml = str_replace("&", "&", $xml); // Fix errors in your XML
$doc = simplexml_load_string($xml);
foreach ($doc->xpath("//option") as $o) {
$o["value"] = "" . $o;
}
$xml = $doc->asXML();
If you insist on using a regexps, you can do so:
$xml = preg_replace(
'#<option value="[^"]*">([^<]*)</option>#',
'<option value="$1">$1</option>', $xml);
It can be made a bit more general, but it works when there are no other attributes in the option tag:
/(.*")([^"]+)(">)([^<]+)(.*)/
Then replace the captured string with this:
$1$4$3$4$5
If you're using backslash as the subgroup reference character, replace the dollar signs with backslash.
Tip: There is a great regexp tester online at http://gskinner.com/RegExr/, check it out!
I haven't tested this, but I believe this will work, using jQuery.
$('option').each(function(elm) { $(this).val($(this).text()); });