views:

762

answers:

6

I'm running into an issue that I think is being caused by needing to double-up on some single quotes inside a string. However, JS's string.replace uses RegEx, and I've never built a RegEx by hand.

Can someone help me build a RegEx to find a single quote and replace it with two single quotes?

+2  A: 

str.replace(/'/g, "''");

Be sure to use the global match flag (g) so that you replace any and all occurrences in the string. More info here.

Evan Meagher
That makes a double quote from a single quote, but does not replace a single quote by two single quotes, as the OP asks.
Jesper
Thanks for the heads up.
Evan Meagher
+7  A: 

Try this:

yourstring = yourstring.replace(/'/g, "''")
Rubens Farias
+2  A: 

JS's string.replace uses RegEx

Not necessarily:

var str = "O'Reilly's books";
alert(str.replace("'", "''", 'g'));

MDC's String replace reference:

The pattern can be a string or a RegExp

Mmm, my code above doesn't seem to work on IE6, so that will be:

str.replace(/'/g, "''")

like the others said, but using regexes for such simple operation is overkill.

PhiLho
A: 

I don't know the exact syntax, but you can find that out yourself:

str.replace(/(?!')'(?!')/g, "''");

Haven't tested this yet, but if it works, it also takes care of only replacing occurances of one single quote in a row. The g modifier is necessary for replacing all ocurrences.

Franz
A: 
js> s = "abc'def'xyz"
abc'def'xyz
js> s.replace(/'/g, "''")
abc''def''xyz
DigitalRoss
A: 

Note that if you don't want to use RegExp (and there are often good reasons not to), the idiom for a simple string replacement is:

str.split("'").join("''")

Although the RegExp version is typically marginally faster, the string version can be a win when you don't know if there might be regex-special characters (like .) in the search string.

bobince