用于分割包含文本和url的字符串的正则表达式
Regex for splitting a string containing text and url
我有如下输入字符串:
[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]"
所以第一个答案不是最好的选择,因为它不允许链接文本包含[
或]
相关文章:
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 从字符串中提取年份的Javascript正则表达式
- Javascript 如何强制 string.replace 不将我的字符串解释为正则表达式
- 如何将正则表达式包含到字符串数组中
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 使用正则表达式反转字符串中的元音
- 如何分割由JavaScript中使用正则表达式的多个部分组成的字符串
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 删除两个字符串正则表达式之间的所有内容
- Javascript,字符串正则表达式匹配
- 字符串正则表达式模式.replace(/{0}/, “$0.00”) 不起作用
- Javascript:字符串正则表达式
- 如何在JavaScript中子字符串正则表达式
- 匹配大写或小写字符串正则表达式
- 逗号和空格分隔的数字和连字符分隔的字符串正则表达式
- 解析CGI查询字符串正则表达式
- 分析已知键的字符串正则表达式,但保留分隔符
- 在一组字符串中重新排列一个字符串 - 正则表达式
- 从字符串正则表达式中提取多个值