Welcome to WebmasterWorld Guest from

Forum Moderators: open

Message Too Old, No Replies

JS script only replaces one instance



3:26 am on Nov 9, 2007 (gmt 0)

10+ Year Member

my js function only replaces one instance of the bbcode array, so say the message text is "(b)text(/b) (b)text(/b)" the output would be "<b>text</b> (b)text(/b)". Any help appreciated. Thanks


var message=document.getElementById('message').value;
var bbcode = new Array("(b)","(/b)");
var htmlcode = new Array("<b>","</b>");

for(var i = 0 ; i < bbcode.length ; i ++ )



5:23 pm on Nov 9, 2007 (gmt 0)

5+ Year Member

this is because it stops after reaching the end of your array, which is only enough for 1 change. try this.

var message="(b)text(/b)(b)Text2(/b)";




6:38 pm on Nov 9, 2007 (gmt 0)

WebmasterWorld Senior Member fotiman is a WebmasterWorld Top Contributor of All Time 10+ Year Member Top Contributors Of The Month

Your bbcode array should contain RegExp values, not string values. Try this:

var bbcode = [/\(b\)/gi, /\(\/b\)/gi];

The first pattern: /\(b\)/gi
That says match the literal '(' followed by a 'b' followed by a literal ')', and the 'g' attribute makes it 'Global' (matches all instances). The 'i' attribute will make it case-insensitive, so you could do:

(b)bold(/b) (B)bold(/B) (b)bold(/B)

and you'd end up with:

<b>bold</b> <b>bold</b> <b>bold</b>

The second pattern: /\(\/b\)/gi
That says match the literal '(' followed by the literal '/' followed by 'b' followed by the literal ')'. Again, the 'g' makes it global and the 'i' makes it case insensitive.


Featured Threads

Hot Threads This Week

Hot Threads This Month