用于分割包含文本和url的字符串的正则表达式

Regex for splitting a string containing text and url

本文关键字:字符串 正则表达式 url 分割 包含 文本 用于      更新时间:2023-09-26

我有如下输入字符串:

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

对于url中不包含=的链接可以正常工作。但是当我们有querystring参数时事情就变得复杂了:

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

如何分割这样的字符串,但不分割url内的= ?

模式:

^.*?'[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>'
演示

不要拆分,直接解析!

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

得到:

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

已在Javascript中测试。

[URL=([^']]+)']([^'[]+)'['/URL']

不分裂:分解成组

t = '[URL=http://domain.com?param=value]My Awesome Link Text[/URL]'
r = /'[URL=([^']]+)']([^'[]+)'['/URL']/;
t.match(r)
--> ["[URL=http://domain.com?param=value]My Awesome Link Text[/URL]", "http://domain.com?param=value", "My Awesome Link Text"]
var reg = /'[URL'=([^']]+)'](.*)'['/URL']$/;
var str = '[URL=http://domain.com]My Awesome Link Text[/URL]';
var result = str.match(reg);

结果值:

["[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]"

所以第一个答案不是最好的选择,因为它不允许链接文本包含[]