JavaScript非正则表达式替换

Bud*_*Joe 12 javascript

任何现有的JavaScript框架是否都具有非正则表达式replace()功能,或者已经将其作为一次性函数发布在Web上的某个位置?

例如,我想要替换"@!#$123=%",我不想担心要逃避哪些字符.大多数语言似乎都有两种替换方法.我想看到这个简单的事情.

Owe*_*wen 24

我可能会误解你的问题,但javascript确实有 replace()

var string = '@!#$123=%';
var newstring = string.replace('@!#$123=%', 'hi');
Run Code Online (Sandbox Code Playgroud)

编辑 :(见评论)第5版似乎确实有这个信息,虽然它没有显示我直接链接到它.这是相关部分:

replace()方法执行搜索和替换操作.它将正则表达式作为其第一个参数,将替换字符串作为其第二个参数.它搜索调用它的字符串以匹配指定的模式.如果正则表达式设置了g标志,则replace()方法用替换字符串替换字符串中的所有匹配项; 否则,它只替换它找到的第一个匹配.如果replace()的第一个参数是字符串而不是正则表达式,则该方法按字面搜索该字符串,而不是使用RegExp()构造函数将其转换为正则表达式,如search()所做的那样.

  • javascript函数仅替换第一个条目 (10认同)
  • 对于“无正则表达式”选项,Nick的回答更为可靠,因为本机替换方法在* replace *字符串中使用特殊字符。因此,虽然用'hi'代替文本很好,但用任何包含'$'的东西替换都可能导致意外的结果。尝试以“ a” .replace(“ a”,“ $$ b”)为例:) (2认同)

Nic*_*ger 15

我在搜索非正则表达式javascript字符串replace()方法时遇到了同样的问题.我的解决方案是使用split()和join()的组合:

"some text containing regex interpreted characters: $1.00".split("$").join("£");
Run Code Online (Sandbox Code Playgroud)

这使:

"一些包含正则表达式解释字符的文本:£1.00"

与replace()比较:

"some text containing regex interpreted characters: $1.00".replace(new RegExp("$"),"£")
Run Code Online (Sandbox Code Playgroud)

奇怪的是:

"一些包含正则表达式解释字符的文本:$ 1.00£"

  • «$»表示正则表达式的行尾!所以`RegExp("$")`与你预期的行尾相匹配没什么奇怪的.在将它发送到RegExp:`RegExp("\ $")之前,你应该已经转义了美元 (6认同)

Mor*_*hai 6

您仍然需要替换MDN上指定的一些美元符号组合。

这产生$bc$$bc

'abc'.replace('a', '$$')
Run Code Online (Sandbox Code Playgroud)

不用担心这个问题的最好方法是使用函数替换:

'abc'.replace('a', () => '$$')
Run Code Online (Sandbox Code Playgroud)