我想在每個連字符處拆分我的字串,但前提是它前面沒有空格。但是,如果它后面跟著一個空格,我想拆分它并洗掉連字符。如果連字符是字串的最后一個字符,也會發生同樣的情況。
例子:
myString = '- foo - -bar --baz -'
假設我打電話
myString.split(regExImLookingFor).join(' ').split(' ').filter(word => word !== '')
我希望它回傳以下陣列:
[foo, -bar, --baz]
注意所有孤立的連字符是如何消失的。其中有 3 個myString:一個在開始,一個在中間,一個在最后。
uj5u.com熱心網友回復:
如前所述,您最好不要使用split,但match為此。但是,如果您的要求確實是讓它與您提供的模板代碼一起使用,那么regExImLookingFor可以如下面的代碼片段所示。
let myString = '- foo - -bar --baz aaa-bbb -';
let result = myString.split(/(?<![-,\/\s])- (?![-,\/\s])|(?:[-,\/\s] (?:[,\/\s]|$))/)
.join(' ').split(' ').filter(word => word !== '');
console.log(result);
有了match它變??得更容易:
let myString = '- foo - -bar --baz aaa-bbb -';
let result = myString.match(/(?:(?<![^,\/\s])- )?[^-,\/\s] /g);
console.log(result);
uj5u.com熱心網友回復:
您可以使用match此正則運算式:
-*[\w #] (?:-[\w #] )*
分解:
-*[\w #]: 此模式匹配 0 個或多個連字符后跟 1 個單詞或或#字符。(?:-[\w #] )*: 匹配 0 個或多個重復的連字符
正則運算式演示
代碼:
var s = 'hyphenated-word - foo - -bar --baz - C C# '
var arr = s.match(/-*[\w #] (?:-[\w #] )*/g);
console.log(arr);
//=> ["hyphenated-word", "foo", "-bar", "--baz", "C ", "C#"]
uj5u.com熱心網友回復:
您可以使用
myString.match(/-*[^\s-] /g)
請參閱正則運算式演示。
詳情:
-*- 零個或多個連字符[^\s-]- 除空格和連字符外的一個或多個字符。
請參閱 JavaScript 演示:
myString = '- foo - -bar --baz -'
console.log(myString.match(/-*[^\s-] /g))
uj5u.com熱心網友回復:
您可以將 split 與模式一起使用并指定不同的場景:
*-(?: |$)| (?=-)|\b-\b
解釋
*-(?: |$)匹配可選空格,-以及 1 個空格或字串的結尾|或者(?=-)匹配 1 個空格斷言-到右邊|或者\b-\b單詞邊界之間的連字符
正則運算式演示
const regex = / *-(?: |$)| (?=-)|\b-\b/;
[
"- foo - -bar --baz -",
"hyphenated-word"
].forEach(s => console.log(s.split(regex).filter(Boolean)));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/522309.html
