我正在尝试使用JavaScript将空间替换为“$$$”。就这么简单。
我有以下代码:
var splitSign = '$$$';
var string = 'hello$$$how$$$are$$$you';
var regex = new RegExp(splitSign,'g');
var res = string.replace(regex,' ');
console.info(res);
结果是字符串未修改!任何想法为什么?
答案 0 :(得分:5)
为此,您不需要regex
,您可以使用split
和join
。这比<{1}} 更快。
regex
string.split(splitSign).join(' ');
会将文本拆分为split
并返回数组。 $$$
将按空格和返回字符串连接数组的元素。
答案 1 :(得分:1)
$
在正则表达式的上下文中具有特殊含义,它标记了行/字符串的结尾。
你必须逃脱它:
var splitSign = '\\$\\$\\$';
答案 2 :(得分:0)
你必须转义$
..因为它是正则表达式中的特殊字符(意思是字符串的结尾)
var splitSign = '\\$\\$\\$'; (if creating new RegExp)
否则只需使用:
string.replace(/\$\$\$/g,' ');
代码:
var splitSign = '\\$\\$\\$';
var string = 'hello$$$how$$$are$$$you';
var regex = new RegExp(splitSign,'g');
var res = string.replace(regex,' ');
alert(res);
&#13;
答案 3 :(得分:0)
$
是正则表达式中的特殊元字符。它以与^
表示开头相同的方式指示字符串的结尾。
为了使用这些特殊字符,你必须通过在它们前面加上反斜杠来转义它们 - 这将导致正则表达式引擎使用字符,而不是将其解析为特殊的元字符。 However because you are using the RegExp
constructor you'll need to double escape the special meta characters.
var splitSign = '\\$\\$\\$';
正如其他答案中所提到的,您正在尝试做的事情很容易完成没有正则表达式。一个简单的string.replace
就足够了。如果要替换多个实例,可以提供g
标志来指定全局匹配。
参考:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/replace
答案 4 :(得分:0)
正如我所解释的那样......没有RegExp的string.replace只会改变字符串中的第一个匹配项。
我找到了以下答案: How to replace all occurrences of a string in JavaScript?
它正是我所需要的。
首先..自动转义字符串:
function escapeRegExp(string) {
return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
然后是替换功能
function replaceAll(string, find, replace) {
return string.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}