0

我有这个字符串(从 css 背景图像 url 的末尾):

.jpg")

我想删除引号和右括号:

var ext = str.replace(/"\)/, '');

在 Firefox 中我得到

.jpg

正如预期的那样。在 Safari 和 Chrome 中我得到

.jpg)

不知道为什么它们不同,但我所知道的是,无论我是否使用它们,Firefox 都会在背景图像的 url 周围添加引号。IE

background-image: url(../img/before_after/slides/Brittany_487_a.jpg)

在 Firefox 中返回 url 周围的引号,但在 WebKit 浏览器中不返回。

4

3 回答 3

4

"没有自动插入的情况下,您可以在匹配中将其设为可选。试试正则表达式:

.replace(/("|')?\)$/, "");

演示:http: //jsfiddle.net/R4hfF/

表示“前一个字符/组的?0 或 1 次出现”。

如果"|'报价是单引号或双引号。

表示这$将发生在字符串的末尾。如果你有整行,一个“;” 可能在那里(就像一个普通的 CSS 规则),所以你可以;$.

于 2013-05-15T18:03:59.537 回答
3

可能不是真正的 RegExp 不同,而是(正如您自己指出的那样)Firefox 在 url 周围添加引号,而 Safari 和 Chrome 则没有。

因此在 Firefox 中你会得到:

.jpg")

这与您的 RegExp 匹配,但在 Safari 和 Chrome 中,您会得到:

.jpg)

这与您的 RegExp 不匹配。

尝试更改您的 RegExp 以涵盖这两种情况,如下所示:

var ext = str.replace(/"?\)/, '');

额外: 同样一文不值,如果文件名恰好包含 ") 或 ),您将不会得到预期的结果。如果您知道,您要删除的字符串将位于末尾,那么你可以通过使用 $ 来修复它,它只匹配你的主题字符串的结尾:

var ext = str.replace(/"?\)$/, '');

更进一步,如果你想涵盖使用单引号'而不是双引号的情况,"你可以通过在括号中列出所有有效字符来做到这一点: [],所以在这种情况下它将是: ["'],所以整个 RegExp:

var ext = str.replace(/['"]?\)$/, '');
于 2013-05-15T18:05:45.423 回答
1

您可以通过在字符后面添加来使字符可选?。因此,如果报价仅存在于某些浏览器中,您可以将模式更改为/"?\)/.

于 2013-05-15T18:05:00.937 回答