Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

Javascript Regex: Bolding needles in a haystack

Related (but not the same):

Javascript Regex: How to bold specific words with regex?

Given a needle and a haystack... I want to put bold tags around the needle. So what regex expression would I use with replace()? I want SPACE to be the delimeter and I want the search to be case insensitive and I want special characters (such as @!#.()) to be ignored in the search

so say the needle is "cow" and the haystack is

cows, at www.cows.com, milk some COWS!

would turn into

<b>cows</b>, at www.cows.com, milk some <b>COWS</b>!

also keywords should be able to have spaces in it so if the keyword is "who is mgmt"...

great band. who. is. mgmt btw?

would turn into

great band. <b>who. is. mgmt</b> btw?

I've got this currently:

function updateHaystack(input, needle) {
    return input.replace(new RegExp('(^|\s)(' + needle + ')(\s|$)','ig'), '$1<b>$2</b>$3');
}

unfortunately it doesn't bold words that are concatenated with a special char... eg. !cow does not turn into !<b>cow</b>

Thank you

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It sounds like should do what you want. It's a zero-width match of "word boundaries".

function updateHaystack(input, needle) {
    return input.replace(new RegExp('\b(' + needle + ')\b','ig'), '<b>$1</b>');
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...