1
var a = 'Construction,Airports,Construction|Commercial Construction,Construction|Education,Construction|Healthcare,Construction|Housing,Construction|Industrial Construction,Construction|Other,Construction|Ports,Construction|Rail,Construction|Residential Construction,Construction|Roads & Bridges,Social Infrastructure|Commercial Construction,Social Infrastructure|Education,Social Infrastructure|Healthcare,Social Infrastructure|Housing,Social Infrastructure|Other,Social Infrastructure|Residential Construction';

alert(a.replace('|', ',', 'g'));

在 chrome 上,它仅替换 的第一次出现|,而g在函数的正则表达式形式中使用标志时replace(),它会替换所有出现:

alert(a.replace(/\|/g, ',', 'g'));

任何人都可以帮助我了解我在替换的第一种形式中是否做错了什么?这是预期的行为还是错误?

4

2 回答 2

3

使用flags参数是非标准的;使用RegExp具有相应标志的对象是标准用法。

一些浏览器可能支持带有字符串版本的标志(参见MDN 上的这个示例),但不应依赖它。

例如,您的示例在 Firefox 中似乎可以正常工作,但在 Chrome 中却不行。

参考:ECMA-262 5.1 § 15.5.4.11

于 2013-09-11T14:34:00.943 回答
1

使用这种格式:a.replace(/\|/g, ',') jsFiddle 示例

根据MDN

在 String.replace 方法中使用 flags 参数是非标准的。不要使用此参数,而是使用带有相应标志的 RegExp 对象。

于 2013-09-11T14:35:08.790 回答