如何正确使用RegExp

时间:2015-06-09 13:40:56

标签: javascript regex

我正在尝试使用JavaScript将空间替换为“$$$”。就这么简单。

我有以下代码:

var splitSign = '$$$';
var string = 'hello$$$how$$$are$$$you';
var regex = new RegExp(splitSign,'g');
var res = string.replace(regex,' ');
console.info(res);

结果是字符串未修改!任何想法为什么?

5 个答案:

答案 0 :(得分:5)

为此,您不需要regex,您可以使用splitjoin。这比<{1}} 更快

regex

string.split(splitSign).join(' '); 会将文本拆分为split并返回数组。 $$$将按空格和返回字符串连接数组的元素。

答案 1 :(得分:1)

$在正则表达式的上下文中具有特殊含义,它标记了行/字符串的结尾。

你必须逃脱它:

var splitSign = '\\$\\$\\$';

答案 2 :(得分:0)

你必须转义$ ..因为它是正则表达式中的特殊字符(意思是字符串的结尾)

var splitSign = '\\$\\$\\$';    (if creating new RegExp)

否则只需使用:

string.replace(/\$\$\$/g,' ');

代码:

&#13;
&#13;
var splitSign = '\\$\\$\\$';
var string = 'hello$$$how$$$are$$$you';
var regex = new RegExp(splitSign,'g');
var res = string.replace(regex,' ');
alert(res);
&#13;
&#13;
&#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);  
}