只要触摸一个链接,使用regEx以纯文本匹配Href就会失败

时间:2014-02-07 20:46:56

标签: javascript jquery regex arrays

我目前正在编写一个代码段,自动链接某些关键字,并将链接的链接保存到名为linked的数组中。我这样做是为了防止某个单词被链接两次。

现在,用户正在写入文本框,写入链接的关键字。这很好。我现在的问题是,当他从文本框中删除文本时,我正试图处理这种情况。这意味着我必须将文本中的所有链接与链接数组匹配,然后从链接数组中删除那些不再在文本中的链接。到目前为止理论。不幸的是我遇到了以下错误。

假设我们有这样的文字:

Test <a href='link1'>Link1</a> <a href='link2'>Link2</a>

我使用这个regEx(/ href ='([^ \'\ _]] +)'/ g)来获取上面文本中的所有href,如下所示:

var hrefs = $(textInput).val().match(/href='([^\'\"]+)'/g);

这给了我一个包含以下内容的数组:

  

HREF = 'LINK1'

     

HREF = '链接2'

如果我开始删除文字并最终得到类似的内容:

Test <a href='link1'>Link1</a> <a href='link2

注意一个'即将消失,整个regEx结果未定义,即使字符串中仍有链接。既然我不是regEx的专家,我看不清楚为什么?这种情况可能有更好的regEx吗?

2 个答案:

答案 0 :(得分:0)

您可以像这样简化正则表达式:

/href='[^']+'/g

演示

http://regex101.com/r/tU2qL0

答案 1 :(得分:0)

像这样使用此正则表达式/href=('|")\w+('|")/g;

var hrefs = $(textInput).val()。match(/ href =('|“)\ w +('|”)/ g);

这应该会给你匹配。

BTW,match()是正确的。不要像@tenub那样exec()

如果有帮助,请将其标记为答案:)