Нужно заменить параметр value = "" текстом между <option value = ""> этим текстом </option> - PullRequest
1 голос
/ 26 февраля 2009

У меня есть этот HTML, и я хочу заменить числовое значение в value="##" на значение между <option>value</option>

Например: <option value="16">Accounting</option>, я хочу знать регулярное выражение, которое потребуется, чтобы автоматически изменить его на <option value="Accounting">Accounting</option>

Я планирую сделать это со всем этим списком.

<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>

РЕДАКТИРОВАТЬ: я хочу использовать GREP, внутри textwrangler

Ответы [ 7 ]

3 голосов
/ 26 февраля 2009

Просто удалите атрибуты значения. <option> по умолчанию принимает значение своего содержимого.

<option value="Accounting">Accounting</option>

эквивалентно:

<option>Accounting</option>

Редактировать: используя sed , вы можете сделать

sed -r s/' value="[0-9]+"'//g
2 голосов
/ 26 февраля 2009

Полагаю, это означает, что вы хотите:

<option value="14">Foobar</option>

Стать:

<option value="Foobar">Foobar</option>

Если это так, вот Javascript. Я предполагаю, что переменная select содержит окружающий элемент DOM тега <select>, например, form.nameOfselect.

for ( var option : select.options ) {
   option.value = option.text;
}
1 голос
/ 26 февраля 2009

Вы добавили, что хотите выполнить операцию в текстовом редакторе. Я написал что-то, предполагая, что вы захотите использовать php, и оставлю это здесь, потому что я думаю, что это важно.

В любом случае, используя TextWrangler (или любой другой текстовый редактор) , замените

<option value="[^"]*">([^<]*)</option>

с

<option value="\1">\1</option>

<ч /> Поскольку вы в основном активны в теге php, я предполагаю, что вы запрашиваете решение в php. Однако позвольте мне начать этот ответ с совета: Если вы ищете способ, укажите свою цель, а не технологию, которую вы считаете подходящей. regexps работает, но это гораздо проще в simplexml

$xml = str_replace("&", "&amp;", $xml); // Fix errors in your XML
$doc = simplexml_load_string($xml);
foreach ($doc->xpath("//option") as $o) {
    $o["value"] = "" . $o;
}
$xml = $doc->asXML();

Если вы настаиваете на использовании регулярных выражений, вы можете сделать это:

$xml = preg_replace(
    '#<option value="[^"]*">([^<]*)</option>#',
    '<option value="$1">$1</option>', $xml);
1 голос
/ 26 февраля 2009

Если ваш HTML правильно сформирован, это поможет:

Regex:

(?<=<option) value="\d+"

Заменить на пустую строку.

В HTML значения параметров автоматически возвращаются к отображаемому тексту, если атрибут значения отсутствует.

1 голос
/ 26 февраля 2009

под Linux:

sed 's|<option value="[^"]*">\([^<>]*\)</option>|<option value="\1">\1</option>|g'
0 голосов
/ 26 февраля 2009

Я не проверял это, но я считаю, что это будет работать, используя jQuery.

 $('option').each(function(elm) { $(this).val($(this).text()); });
0 голосов
/ 26 февраля 2009

Его можно сделать более общим, но он работает, когда в теге параметра нет других атрибутов:

/(.*")([^"]+)(">)([^<]+)(.*)/

Затем замените захваченную строку следующим:

$1$4$3$4$5

Если вы используете обратную косую черту в качестве ссылочного символа подгруппы, замените знаки доллара на обратную косую черту.

Подсказка: на сайте http://gskinner.com/RegExr/, есть отличный тестер регулярных выражений * Проверьте это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...