HTML名称属性的正则表达式

时间:2013-07-09 18:27:22

标签: javascript regex

我正在尝试编写一个正则表达式脚本,该脚本将解析HTML名称属性并将每个嵌套数组作为匹配项返回。这是一个例子:

<input type="text" name="contact[email]" />
<input type="text" name="contact[address][street]" />

我需要一些javascript正则表达式来解析那些并以这种方式匹配它们

Match 1: contact Match 2: email
Match 1: contact Match 2: address Match 3: street

这是我现有的正则表达式:

/(^.*?)(\[(.*?)\])?$/

谢谢!

5 个答案:

答案 0 :(得分:2)

我要做的是用name分隔每个[] 所以它会是这样的:

<input type="text" name="[contact][email]" />
<input type="text" name="[contact][address][street]" />

然后我会将它用于正则表达式:

(?:\[)(.*?)(?:\])

我的解决方案减少了所需的操作数量,使您的命名约定更直接。每个匹配代表name部分中的单独条目

答案 1 :(得分:2)

我认为最简单的方法是

var str = "contact[email]"
str.match(/\w+/g)
//=> ["contact", "email"]

var str = "contact[address][street]"
str.match(/\w+/g)
//=> ["contact", "address", "street"]

答案 2 :(得分:1)

使用以下正则表达式:

/(^[^\[]+)(?=\[)|(([^\[\]]+)(?=\]))/g

以下示例用法。

Demo fiddle here.

HTML:

<input id="one" type="text" name="contact[email]" />
<input id="two" type="text" name="contact[address][street]" />

JavaScript的:

var regex = /(^[^\[]+)(?=\[)|(([^\[\]]+)(?=\]))/g;

var nameOne = document.getElementById('one').getAttribute('name');
console.log('one: ', nameOne.match(regex));
var nameTwo = document.getElementById('two').name;
console.log('two: ',nameTwo.match(regex));

输出:

one: ["contact", "email"]
two: ["contact", "address", "street"] 

答案 3 :(得分:0)

<input type="(?<type>[A-Za-z0-9]+)" name="(?<Name>[A-Za-z0-9\[\]]+)" />

工作正常。我附上了图片来展示如何运作

enter image description here

因为每个值都将在RegexMatch之后返回数组, 然后你可以这样做

var first = RegexMatch.Groups["Name"].Split('[')[0];

您将获得name="contact[address][street]"中的第一个值,第一个=“联系人” 那么你可以做到

var second = regexMatch.Groups["Name"].Split('[')[1];
then second = "address";

这是C#的方式,转换为javascript !!

答案 4 :(得分:0)

我喜欢使用split()来抓取中间块而不是更复杂的RegExps:

var strFormHTML='<input type="text" name="contact[email]" /><input type="text" name="contact[address][street]" />';
var names = strFormHTML.split(/[\W\w]+? name=\"([^"]+)\"[\w\W]+?/).filter(Boolean).slice(0,-1); 
alert(names); //shows: "contact[email]", "contact[address][street]"
相关问题