【发布时间】:2017-01-05 14:44:32
【问题描述】:
所以我有这个Regular expression,它基本上必须将给定的字符串过滤为 HTML(5) 格式 属性列表。它目前并没有让我感到充实,但这即将改变! (希望如此)
我试图实现,只要找到一个匹配项,它就会选择文本,直到下一次出现或字符串的结尾,作为 second 匹配。所以如果你看一下当前的正则表达式:
/([a-zA-Z]+|[a-zA-Z]+-[a-zA-Z0-9]+)=["']/g
这样的字符串:hey="hey world" hey-heyhhhhh3123="Hello world" data-goed="hey"
将像这样被过滤/匹配:
MATCH 1. [0-3] `hey`
MATCH 2. [16-32] `hey-heyhhhhh3123`
MATCH 3. [47-56] `data-goed`
这必须被视为 attribute-name(s),现在.. 我们只需要获取属性的 value(s)。所以提到的字符串必须有这样的结果:
MATCH 1.
1 [0-3] `hey`
2 [6-14] `hey world`
MATCH 2.
1 [16-32] `hey-heyhhhhh3123`
2 [35-45] `Hello world`
MATCH 3.
1 [47-56] `data-goed`
2 [59-61] `hey`
任何人都可以尝试帮助我实现我的成就吗?它会很受欢迎!
【问题讨论】:
-
我认为这里最好的模式是
/([^\s=]+)=(?:"([^"]+)"|(\S+))/g -
@WiktorStribiżew 我正在尝试转义引号中的引号/第一次出现和下一次出现之间的所有内容(对于内联的 javascript 执行/函数)。所以我不能使用你的正则表达式:/
-
@WiktorStribiżew 没错!介意将其发布为带有正则表达式解释的答案吗?这将是公认的答案!
-
@Bilal075_ 您是否有理由需要自己解析 HTML?浏览器已经很好地做到了,您可以通过 DOM 访问元素 attributes
标签: javascript regex filter attributes expression