仅替换字符串中间的特殊字符,而不是开头和结尾的字符?

4
我需要用 '\'(反斜杠和撇号)替换特殊字符 '(撇号),但这只适用于字符串的中间部分,而不是字符串的开头和结尾。
例如:msg ='My Son's Daughter';
字符串中可能有多个撇号。我只想替换字符串中不是起始和结束字符的撇号。
请分享任何想法。

4
msg = msg.replace(/'/g, "\'")?- 开始和结束的引号是字符串定界符... - Niccolò Campolungo
1
冒号是 :,你指的是撇号。 - nl-x
3个回答

4

通过结合使用 substr() 和正则表达式:

var msg ="'My Son's Daughter'";

msg = msg.substr(0, 1) + msg.substr(1, msg.length-2).replace(/'/g, "\\'") + msg.substr(msg.length-1, 1);

输出:

'My Son\'s Daughter' 

如图所示,只有内部的'被替换,第一个和最后一个则被忽略。

2

尝试

msg = msg.replace(/(.)'(.)/g, "$1\\'$2");

.在开头和结尾会要求在'之前和之后匹配任何字符。

()将捕获其中定义的字符(.)到变量中($1$2)。

$1$2表示两个()捕获的字符。

\\转义或表示文本中的字面\

g之前的开头的/定义为正则表达式(regex)

g是一个修饰符(全局),将指示所有出现的情况。

Regex不应被放在引号中,就像它是一个字符串一样。


它的输出类似于 My Son\'s Daughter,而操作者想要类似于 My Son\s Daughter 的输出。 - Devang Rathod
@DevangRathod 不,OP说:我需要用反斜杠冒号替换特殊字符‘(冒号)’。忽略OP中的冒号/撇号错误,你最终需要用'替换'。 - nl-x
@nl-x 这仅适用于第一个撇号。对于其余的,除了开头和结尾的撇号外,它都不起作用。 - Mr.Chowdary
啊,是的,我忘记加上 g 了。我刚刚把它加回去了。 - nl-x

0

replace函数就是你想要的。这个函数可以解决你的问题:

msg = msg.replace(/'/g, "\\'");

他不想要将任何第一个或最后一个 ' 斜杠化,只希望对它们之间的字符进行操作。因此这不是一个解决方案。 - nl-x
在这个例子中,第一个和最后一个 ' 字符是字符串定界符。这段代码不会替换字符串定界符。 - alnorth29
我明白你在暗示什么。他明确表示“但这应该只出现在字符串的起始和结束字符之间。”... 但他是一个连撇号和冒号都分不清的人(哈哈),你可能是对的。 - nl-x
1
我也有点困惑于 msg ='My Son's Daughter'。这甚至是有效的语法吗? - alnorth29
也许字符串是 msg ='My Son's Daughter';,代码是 var myString "msg ='My Son's Daughter';"; ... 结果应该是 msg =\'My Son\'s Daughter'; ;) - nl-x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接