首先我很抱歉,如果我的问题有点混乱,英语不是我的母语,所以我需要用该列表的第一个URL替换一堆URL,URL不断变化,这是我要替换的文字:
[rotate=url1.usa.gov;url2.facebook.com/;http://9gag.com]
唯一不改变的是[rotate=....]
,网址除以;
我希望结果为:
url1.usa.gov
以下是我的尝试:
var str = str.replace(/\[rotate=.*;.*\]/g, '$0');
但是当我这样做时,结果是:$0
我怎么能这样做?
答案 0 :(得分:2)
.replace
解释了替换字符串中以$
开头的一些特殊序列,但$0
不是其中之一。
如果要从匹配中提取子字符串,则需要捕获组((
... )
)。与它们匹配的任何内容都可以作为匹配对象的属性以及替换字符串中的$1
,$2
,...。
在你的情况下,我会选择
str.replace(/\[rotate=([^;\]]*)(?:;[^\]]*)?\]/g, '$1')
那是:
\[rotate= // find '[rotate=', followed by
( [^;\]] * ) // 0 or more characters that are not ';' or ']'
// (and remember this part as $1),
(?: // group, but don't capture
; // a literal ';'
[^\]] * // 0 or more characters that are not ']'
)? // this group is optional
\] // a literal ']'
即使列表中只有一个网址,这也很有用:[rotate=example.com]
会变成example.com
。
答案 1 :(得分:0)
如果您仍想使用正则表达式,可以尝试:
str.replace(/\[rotate=([^;\[\]]*)(;[^\[\];]*)*\].*/g, '$1')
返回
"url1.usa.gov"
请参阅test cases。