正则表达式用于拆分包含文本和网址的字符串

时间:2014-07-18 07:36:05

标签: javascript regex string split

我输入如下字符串:

[URL=http://...]Lorem ipsum[/URL]

它们应该在HTML标签中转换:

<a href="http://...">Lorem ipsum</a>

示例:

[URL=http://domain.com]My Awesome Link Text[/URL]

这应该转换为:

<a href="http://domain.com">My Awesome Link Text</a>

我尝试使用正则表达式分割字符串:

> a = "[URL=http://domain.com]My Awesome Link Text[/URL]"
'[URL=http://domain.com]My Awesome Link Text[/URL]'
> s = a.split(/\[|\]|=/)
[ '',
  'URL',
  'http://domain.com',
  'My Awesome Link Text',
  '/URL',
  '' ]
> o = "<a href=\"" + s[2] + "\">" + s[3] + "</a>"
'<a href="http://domain.com">My Awesome Link Text</a>'

这适用于不在其网址中包含=的链接。但是当我们有查询字符串参数时,事情会变得复杂:

> a = "[URL=http://domain.com?param=value]My Awesome Link Text[/URL]"
'[URL=http://domain.com?param=value]My Awesome Link Text[/URL]'
> s = a.split(/\[|\]|=/)
[ '',
  'URL',
  'http://domain.com?param',
  'value',
  'My Awesome Link Text',
  '/URL',
  '' ]
> o = "<a href=\"" + s[2] + "\">" + s[3] + "</a>"
'<a href="http://domain.com?param">value</a>'

如何拆分这些字符串,但不拆分网址内的=

3 个答案:

答案 0 :(得分:1)

不要拆分,只需解析它!

a.match(/\[URL=(.+)\](.+)\[\/URL\]/i)

我们得到:

["[URL=http://domain.com]My Awesome Link Text[/URL]", "http://domain.com", "My Awesome Link Text"]

答案 1 :(得分:1)

模式:

^.*?\[URL=([^\]]*)\]([^\[]*).*$

的更换:

<a href="$1">$2</a>

在JavaScript中:

> "[URL=http://domain.com?asd=a]My Awesome Link Text[/URL]".replace(/^.*?\[URL=([^\]]*)\]([^\[]*).*$/, '<a href="$1">$2</a>')
'<a href="http://domain.com?asd=a">My Awesome Link Text</a>'

DEMO

答案 2 :(得分:1)

var reg = /\[URL\=([^\]]+)\](.*)\[\/URL\]$/;
var str = '[URL=http://domain.com]My Awesome Link Text[/URL]';
var result = str.match(reg);

结果val:

["[URL=http://domain.com]My Awesome Link Text[/URL]", "http://domain.com", "My Awesome Link Text"]

你可以使用结果:

var html = "<a href=\"" + result[1] + "\">" + result[2] + "</a>";

其他样本测试:

链接文字可能包含[]或其他代码[red][/red],如此

"[URL=http://domain.com]My Awesome [red]Link Text[/red][/URL]"

所以第一个答案不是最佳选择,因为它不允许包含[]

的链接文字