2012-07-19 4 views
2

Regexp граница слова.Regexp граница слова

Согласно Regular_Expressions guide, \b соответствует границе слова, например пробелу, символу новой строки, символу пунктуации или концу строки.

Я пытаюсь изменить следующую строку.

" 
    abc 
" 

в

"abc" 

Я попробовать следующее, но он не работает. Любые идеи?

" abc ".replace(/\b/,""); 
+0

да, спасибо большое @Engineer – js999

+0

Посмотрите на ответы, приведенные ниже, они могут быть более подходящими для вас. – Engineer

+0

Документация, с которой вы связаны, неверна. Спасибо что подметил это. Возможно, кто-то с учетной записью MDN может исправить это? –

ответ

0

\b maches только граничный без пробелов, выбирая место между пространством и первой/последней буквой.

использовать это:

//fulltrim replaces all new lines with space and reduces doubled spaces 
String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');} 

//just trim spaces from begging and ending of string 
String.prototype.trim=function(){return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');}; 

использование

" ssss ".fulltrim(); 
"  
    ssss 
".fulltrim(); 

Некоторые браузеры реализовали trim метод.

0

\b сам по себе не соответствует характер, соответствует позиция. Также как ^ и $.

"\n\t \n hello world \t \n\n".replace(/^\s*/, "").replace(/\s*$/, ""); 
// return "hello world" 
3

Это описание границ слов плохо написано (что случается очень, к сожалению). Вы найдете гораздо лучшую ссылку here.

Граница слов является утверждением с нулевой шириной: она не потребляет никаких символов, она просто утверждает, что условие истинно. В этом случае он утверждает, что текущая позиция либо сопровождается символом слова и не предшествует одному, либо предшествует символу слова и не сопровождается одним.

Если вы хотите совпадать со всем, что не является символом слова, используйте \W (обратите внимание на капитал W). Но вы действительно только должны соответствовать пустое пространство, которое \s:

" abc ".replace(/\s+/, ""); 

Если вы пытаетесь сделать традиционную операцию обрезки, вам нужно использовать якоря, чтобы убедиться, что вы подходите только пробелы в самом начале или в конце строки:

" abc ".replace(/^\s+|\s+$/, ""); 
+0

Я борется с тем, почему \ b работает в некоторых случаях, когда мои группы, не связанные с захватом, терпят неудачу.Ваше утверждение о том, что граница слова является утверждением с нулевой шириной, привела домой то, что происходило больше, чем все, что я читал за последние несколько дней. Спасибо за то, что так кратко изложил уникальность и разъяснил, что было в игре –

Смежные вопросы